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
関連リンク
今までは、パラメータ(引数)の無いファンクションを調べてきた。 ここで、パラメータとして文字列を与えることを考えてみよう。
実は、ファンクションを作ってみよう で、既に以下のようにパラメータのある関数をマニュアルより借用して作っていた。
mysql> DROP FUNCTION IF EXISTS hello;
Query OK, 0 rows affected, 1 warning (0.03 sec)
mysql> DELIMITER //
mysql> CREATE FUNCTION hello (s CHAR(20)) RETURNS CHAR(50)
-> DETERMINISTIC RETURN CONCAT('Hello, ',s,'!');
-> //
Query OK, 0 rows affected (0.00 sec)
mysql> DELIMITER ;
mysql> SELECT hello('Asakusa');
+------------------+
| hello('Asakusa') |
+------------------+
| Hello, Asakusa! |
+------------------+
1 row in set (0.00 sec)
mysql>
しかし、これは引数にアルファベットしか与えていないので、良くない。
まずは、hello に漢字の文字列を与えてみよう。
mysql> SELECT hello('漢字');
+-------------------+
| hello('漢字') |
+-------------------+
| Hello, ´ ? ! |
+-------------------+
1 row in set (0.04 sec)
mysql>
今は、eucjpms にしてあるのだが、予定通りうまく行かない。
戻り値のキャラクタセットをbinaryにして誤魔化したで、 現在のファンクションは、文字列を戻すとき、そのキャラクタセットは binaryにしておかないと駄目らしいことを発見したので、 その点を修正してみよう。
mysql> DROP FUNCTION IF EXISTS hello;
Query OK, 0 rows affected (0.00 sec)
mysql> DELIMITER //
mysql> CREATE FUNCTION hello (s CHAR(20))
-> RETURNS CHAR(50) CHARACTER SET binary
-> DETERMINISTIC RETURN CONCAT('Hello, ',s,'!');
-> //
Query OK, 0 rows affected (0.00 sec)
mysql> DELIMITER ;
mysql> SELECT hello('漢字');
+----------------------------------------------------+
| hello('漢字') |
+----------------------------------------------------+
| Hello, 漢字! |
+----------------------------------------------------+
1 row in set (0.00 sec)
mysql>
パラメータで渡した漢字文字列を含む文字列が、 文字化けもせず(無理矢理の部分もあるが)戻って来た。
色々まだ調べることはありそうだが、 なんとなく日本語文字列を扱うことができるような気分になってきた。
戻る:戻り値のキャラクタセットをbinaryにして誤魔化した
フィードバック:
There is no comment.