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
関連リンク
\(5C)のキャラクタセットの変換にはどうも問題があるようだ。 次は何を調べれば良いのだろうか?
CONVERT()ではどのように変換されるのだろうか。
さて、キャラクタセットの変換を調べているのだから、 キャラクタセットの変換のための関数 CONVERT()が実際どのように 変換するのかをちゃんと調べておかねばなるまい。
今回は、端末の文字コードはSJISにしよう。
mysql> SET NAMES sjis; Query OK, 0 rows affected (0.00 sec) mysql> SELECT CONVERT( _sjis 0x5C USING ujis ); +----------------------------------+ | CONVERT( _sjis 0x5C USING ujis ) | +----------------------------------+ | \ | +----------------------------------+ 1 row in set (0.00 sec)
全角の\になってしまったけれど、これはサーバからクライアントに送られて 来たときにそうなったのか、それともサーバですでにそうなっていたのかが これだけでは分らない。
ということで、HEX()を使うことで、サーバ上でどのようになっているかちゃんと 調べてみよう。
mysql> SELECT HEX(CONVERT( _sjis 0x5C USING ujis ) ); +----------------------------------------+ | HEX(CONVERT( _sjis 0x5C USING ujis ) ) | +----------------------------------------+ | 5C | +----------------------------------------+ 1 row in set (0.00 sec)
ということは、sjis から ujis への変換では問題がないようだ。
次は、ujis から sjis への変換をやってみよう。
mysql> SELECT HEX(CONVERT( _ujis 0x5C USING sjis ) ); +----------------------------------------+ | HEX(CONVERT( _ujis 0x5C USING sjis ) ) | +----------------------------------------+ | 815F | +----------------------------------------+ 1 row in set (0.00 sec)
5C が、全角2バイトのシフトJISになってしまったようだ。 やっぱり、クライアントサーバ間だけではなく、 キャラクタセット変換関数でも同じように困った変換をやらかしてくれるようだ。
mysql> SELECT HEX(CONVERT( _latin1 0x5C USING sjis ) ); +------------------------------------------+ | HEX(CONVERT( _latin1 0x5C USING sjis ) ) | +------------------------------------------+ | 815F | +------------------------------------------+ 1 row in set (0.00 sec) mysql> SELECT HEX(CONVERT( _utf8 0x5C USING sjis ) ); +----------------------------------------+ | HEX(CONVERT( _utf8 0x5C USING sjis ) ) | +----------------------------------------+ | 815F | +----------------------------------------+ 1 row in set (0.00 sec)
latin1 --> sjis, utf8 --> sjis も駄目なようである。
それにしても、何で全角の\にしてくれるんだろう。 どこからそんな情報を得て、そのように作ったのだろうか?
フィードバック:
There is no comment.