Chat (Lingr.com)
Informaiton
Daily
Column
- MySQL日本語の旅(5/1)
- アクセス向上秘伝(5/9)
- 一風変ったHaskellλ門(6/13)
- SICP Answer Book (5/31) 問題3.26追加
Zope Solution
Extra
アーカイブ
OSS案内所
Site Info
関連リンク
良く考えてみると、前回は、SET NAMES で eucjpms の設定を行なう前に 関数を作ってしまっていた。一旦消して、eucjpms にしてから行なってみよう。
mysql> DROP FUNCTION hello;
Query OK, 0 rows affected (0.05 sec)
mysql> SET NAMES eucjpms;
Query OK, 0 rows affected (0.00 sec)
mysql> DELIMITER //
mysql> CREATE FUNCTION hello() RETURNS VARCHAR(50)
-> DETERMINISTIC RETURN 'こんにちは';
-> //
Query OK, 0 rows affected (0.00 sec)
mysql> DELIMITER ;
mysql>
こんどは、どうなるであろうか?
mysql> SELECT hello(); +---------+ | hello() | +---------+ | ????? | +---------+ 1 row in set, 1 warning (0.00 sec) mysql>
前と情况が異なって、?が5つ並んでしまった。
実際に何が出力されているのか、16進数にする関数 HEX()で調べてみよう。
mysql> SELECT HEX(hello()); +--------------+ | HEX(hello()) | +--------------+ | 3F3F3F3F3F | +--------------+ 1 row in set, 1 warning (0.00 sec) mysql>
本当の '?' のようだ。'こんにちは' の5文字が、 それぞれ '?' に変換されたというか、化けてしまったのである。
では、hello() から返ってきた文字列のキャラクタセットを調べてみよう。 そのためには、 CHARSET() という関数を使えば良かった。
mysql> SELECT CHARSET(hello()); +------------------+ | CHARSET(hello()) | +------------------+ | binary | +------------------+ 1 row in set (0.00 sec) mysql>
hello()の戻り値である文字列のキャラクタセットが、 何と binary になってしまっている。
何故? ちょっとじっくり考えるしかないようだ。
フィードバック:
There is no comment.