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
関連リンク
_binary というintroducerを用いたとき、変になるのだった。
mysql> SELECT CHARSET(CONCAT(_binary'東京',@STOKYO)); +----------------------------------------+ | CHARSET(CONCAT(_binary'東京',@STOKYO)) | +----------------------------------------+ | cp932 | +----------------------------------------+ 1 row in set (0.00 sec) mysql>
となってしまうのだが、_binary'東京'を一旦変数にぶちこんでから 同じことをすると、どうなるだろうか。
mysql> SET @B = _binary'東京'; Query OK, 0 rows affected (0.00 sec) mysql> SELECT CHARSET(CONCAT(@B,@STOKYO)); +-----------------------------+ | CHARSET(CONCAT(@B,@STOKYO)) | +-----------------------------+ | binary | +-----------------------------+ 1 row in set (0.00 sec) mysql>
あれれ、結果がbinaryになってしまった。これは正しいではないか。
ということは、 CONCATのパラメータとして直接 _binary'文字列' を書いた場合は正しく動かず、 一旦変数に入れてしまうと大丈夫になる。
CONCAT()の中に、直接 _binary'文字列' があったとき、 結果のキャラクタセットがbinaryにならないようだ。
binary 以外をintroducerで作るとどうなるか
実は、こんな感じになってしまった。
mysql> SELECT CHARSET(CONCAT(_binary'tokyo',_cp932'tokyo')); +-----------------------------------------------+ | CHARSET(CONCAT(_binary'tokyo',_cp932'tokyo')) | +-----------------------------------------------+ | binary | +-----------------------------------------------+ 1 row in set (0.00 sec) mysql> SELECT CHARSET(CONCAT(_binary'tokyo',@STOKYO)); +-----------------------------------------+ | CHARSET(CONCAT(_binary'tokyo',@STOKYO)) | +-----------------------------------------+ | cp932 | +-----------------------------------------+ 1 row in set (0.00 sec) mysql> SELECT CHARSET(CONCAT(@BTOKYO,@STOKYO)); +----------------------------------+ | CHARSET(CONCAT(@BTOKYO,@STOKYO)) | +----------------------------------+ | binary | +----------------------------------+ 1 row in set (0.00 sec) mysql>
なかなか奥が深いな。
ともにintroducerで指定した場合は、結果はbinaryで正しい。
取りあえずの結論:
CONCAT()の中で、_binary を使った場合にはおかしくなるようだ。
introducerによる指定は、中味は変更せず、キャラクタセットだけを変更する、 つまり見せかけだけを変更するので、 CONVERT()のように本当に呼び出す必要もないので、 処理が非常に軽いはずなのだが、たぶん何処かで処理をミスっているらしい。
CONCAT()の中にbinaryの文字列があった場合についての迷走はこのあたりにして、 次回はCONCAT()の本来の機能の続きを旅しようと思う。
戻る:CONVERT()によるbinary文字列のCONCATはOK
次へ:eucjpms,cp932,utf8混在のCONCATは
フィードバック:
There is no comment.