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
関連リンク
連載1周年 および MySQL株式会社設立
連載も丸1周年となり、それを記念してという訳ではないのだが、 MySQL株式会社が設立された。
いつまで続けられるか何も考えずに始めた連載「MySQL日本語の旅」だが、まだまだ旅をしていない部分も多く、 この調子だとまだまだ先がありそうだ。問題は体力、気力が続くだけかな。
前回の文字列パラメータのキャラクタセットは何になっているかでは、 ファンクションの文字列パラメータにおいて、 キャラクタセットの指定がないときの動きが変なことが分かった。
デフォルトでおかしくなるのだから、 今度はちゃんと指定したときどうなるかを調べてみよう。
ということで、ファンクション parametercharset のパラメータの部分を
変更前:s CHAR(20) 変更後:s CHAR(20) CHARACTER SET eucjpms
にしたらどうなるか確かめてみよう。
mysql> DROP FUNCTION parametercharset;
Query OK, 0 rows affected (0.00 sec)
mysql> DELIMITER //
mysql> CREATE FUNCTION parametercharset( s CHAR(20) CHARACTER SET eucjpms )
-> RETURNS CHAR(50) CHARACTER SET binary
-> DETERMINISTIC RETURN CONCAT( s, ':', CHARSET(s) );
-> //
Query OK, 0 rows affected (0.00 sec)
mysql> DELIMITER ;
mysql>
登録はできたようだ。
mysql> SELECT parametercharset('漢字');
+----------------------------------------------------+
| parametercharset('漢字') |
+----------------------------------------------------+
| 漢字:eucjpms |
+----------------------------------------------------+
1 row in set (0.00 sec)
mysql> SHOW VARIABLES LIKE 'character\_set\_%';
+--------------------------+---------+
| Variable_name | Value |
+--------------------------+---------+
| character_set_client | eucjpms |
| character_set_connection | eucjpms |
| character_set_database | eucjpms |
| character_set_results | eucjpms |
| character_set_server | latin1 |
| character_set_system | utf8 |
+--------------------------+---------+
6 rows in set (0.00 sec)
mysql>
ちゃんと動作しているようだが、クライアントもeucjpmsで、 ファンクションのパラメメータの指定もeucjpmsであり、 これではコード変換は行なわれないので面白くない。
それで、SET NAMES で、cp932 に変更した場合にどうなるかを調べてみよう。
mysql> SET NAMES cp932;
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT parametercharset('漢字');
+----------------------------------------------------+
| parametercharset('漢字') |
+----------------------------------------------------+
| :eucjpms |
+----------------------------------------------------+
1 row in set, 1 warning (0.01 sec)
mysql>
キャラクタセット自体はeucjpmsと認識されているようだが、 文字列自体は完全に消えてしまって、文字化けにさえなっていない。
突然、パラメータで渡した文字列の'漢字'という文字列の部分が消えてしまった。
また何か失敗してしまったようだ。
フィードバック:
There is no comment.