Open Source WEB

パラメータで渡された文字列がどういうものかを16進数にして、 出力の文字列に含めるようにしてみよう。 そうすることで、どういう文字列だったかが正確に分かるというものだ。

さて、まずは全部の環境を eucjpms に戻してから確認しよう。

mysql> SET @@character_set_database=eucjpms;
Query OK, 0 rows affected (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>

今度は、戻す文字列を作るところを、 CONCAT( s, ':', HEX(s), ':', CHARSET(s) ) にしてみよう。 つまり、

  • パラメータの文字列
  • 16進数表記
  • パラメータのキャラクタセット

が : で繋がったものがファンクションの戻り値となる。

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, ':', HEX(s), ':', CHARSET(s) );
    -> //
Query OK, 0 rows affected (0.01 sec)
 
mysql> DELIMITER ;
mysql>

では、'漢字' という文字列を与えて、 それに色々なオプション(16進数表記、キャラクタセット)が加えられた 文字列がちゃんと返ってくるか確認してみよう。

mysql> SELECT HEX('漢字');
+-------------+
| HEX('漢字') |
+-------------+
| B4C1BBFA    |
+-------------+
1 row in set (0.00 sec)
 
mysql> SELECT parametercharset('漢字');
+----------------------------------------------------+
| parametercharset('漢字')                           |
+----------------------------------------------------+
| 漢字:B4C1BBFA:eucjpms                              |
+----------------------------------------------------+
1 row in set (0.00 sec)
 
mysql>

うまく行っているようだ。

ちょっとここで、現在の環境を整理しておこう。 現在は、以下の全てが、EUC-JP(eucjpms)に設定されている。

  • ターミナル
  • character_set_client
  • character_set_connection
  • パラメータのキャラクタセット
  • character_set_database
  • character_set_results

そして、ファンクションの戻り値だけがバグ回避のために binary になっている。 つまり、どこにも文字列データそのものに変化を及ぼす類の キャラクタセット変換が発生する個所がないので、かなり安全な情况になっている、 と思っているがどうだろう。

調べるための道具の用意ができたようなので、今日はここまでとしよう。


戻る:文字列パラメータのキャラクタセットを指定してみよう

次へ:ファンクションの本体をBEGIN〜ENDで括ってみよう


フィードバック:

Name:
Comment:

There is no comment.

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

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