Open Source WEB

連載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と認識されているようだが、 文字列自体は完全に消えてしまって、文字化けにさえなっていない。

突然、パラメータで渡した文字列の'漢字'という文字列の部分が消えてしまった。

また何か失敗してしまったようだ。


戻る:文字列パラメータのキャラクタセットは何になっているか

次へ:文字列パラメータの中味を調べてみよう


フィードバック:

Name:
Comment:

There is no comment.

このサイトは、 IPA の「平成15年度オープンソフトウエア活用基盤整備事業」 の委託事業として開発されたKahuaで試験的に運用しております。

Copyright (c) 2004-2007 株式会社タイムインターメディア About Us