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
関連リンク
latin1の文字列も用意しておこう。
mysql> SET @T = _latin1'Tokyo'; Query OK, 0 rows affected (0.00 sec) mysql> SELECT @T, CHARSET(@T); +-------+-------------+ | @T | CHARSET(@T) | +-------+-------------+ | Tokyo | latin1 | +-------+-------------+ 1 row in set (0.00 sec) mysql>
さて、前回の続きで、
SET NAMES eucjpms; SET @ETOKYO='東京'; SET @STOKYO=CONVERT(@ETOKYO USING cp932); SET @UTOKYO=CONVERT(@ETOKYO USING utf8); SET @BTOKYO=CONVERT(@ETOKYO USING binary); SELECT @ETOKYO, @STOKYO, @UTOKYO, @BTOKYO;
が実行されているものとしよう。
では、例によって、latin1 と他のキャラクタセットの組み合わせを調べていこう。
latin1 + utf8
mysql> SELECT CONCAT(@T,@UTOKYO); +--------------------+ | CONCAT(@T,@UTOKYO) | +--------------------+ | Tokyo東京 | +--------------------+ 1 row in set (0.00 sec) mysql> SELECT CHARSET(CONCAT(@T,@UTOKYO)); +-----------------------------+ | CHARSET(CONCAT(@T,@UTOKYO)) | +-----------------------------+ | utf8 | +-----------------------------+ 1 row in set (0.00 sec) mysql> SELECT CHARSET( CONCAT(@UTOKYO,@T)); +------------------------------+ | CHARSET( CONCAT(@UTOKYO,@T)) | +------------------------------+ | utf8 | +------------------------------+ 1 row in set (0.00 sec) mysql>
とうことで、latin1 と utf8 の組み合わせは可能で、結果は utf8 になるようだ。
latin1 + eucjpms
mysql> SELECT CONCAT(@T,@ETOKYO); ERROR 1267 (HY000): Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (eucjpms_japanese_ci,IMPLICIT) for operation 'concat' mysql> SELECT CONCAT(@ETOKYO,@T); ERROR 1267 (HY000): Illegal mix of collations (eucjpms_japanese_ci,IMPLICIT) and (latin1_swedish_ci,IMPLICIT) for operation 'concat' mysql>
とエラーになってしまった。この組み合わせは拒否されるようだ。
latin1 + cp932
eucjpms が駄目だったのだから、当然拒否されるだろうけれど、 一応確認しておこう。
mysql> SELECT CONCAT(@T,@STOKYO); ERROR 1267 (HY000): Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (cp932_japanese_ci,IMPLICIT) for operation 'concat' mysql> SELECT CONCAT(@STOKYO,@T); ERROR 1267 (HY000): Illegal mix of collations (cp932_japanese_ci,IMPLICIT) and (latin1_swedish_ci,IMPLICIT) for operation 'concat' mysql>
やはり、思った通りに駄目であった。
latin1 + binary
これは、当然のように binary になるであろう。
mysql> SELECT CHARSET(CONCAT(@T,@BTOKYO)); +-----------------------------+ | CHARSET(CONCAT(@T,@BTOKYO)) | +-----------------------------+ | binary | +-----------------------------+ 1 row in set (0.00 sec) mysql> SELECT CHARSET(CONCAT(@BTOKYO,@T)); +-----------------------------+ | CHARSET(CONCAT(@BTOKYO,@T)) | +-----------------------------+ | binary | +-----------------------------+ 1 row in set (0.00 sec) mysql>
結論
ということで、次のようになるってことかな。
latin1 + binary ⇒ binary latin1 + utf8 ⇒ utf8 latin1 + eucjpms エラー latin1 + cp932 エラー
キャラクタセットの組み合わせには、いろいろ注意すべきことがあるようだ。
マニュアルのどこかにきちんとしたキャラクタセットの組み合わせポリシーが 書いてあるかと思って捜してみたのだが、見当たらなかった。 英語力の不足もあるので、見逃した可能性も高い。 キャラクタセットの組み合わせポリシーを御存じの方、見つけられた方は、 フィードバックをお願いします。
戻る:eucjpms,cp932,utf8三種混在のCONCATは
フィードバック:
There is no comment.