Open Source WEB

新キャラクタセット cp932 と eucjpms

5.0.3で日本語利用者のために、新しいキャラクタセットとして cp932 と eucjpms をサポートしたとアナウンスがあった。 しかし、どうも5.0.3ではアナウンスはしたものの、入れ忘れたらしく、 実際には 5.0.4 から入るようになった。

cp932 と eucjpms の説明は、Googleで検索すれば出てくるのだが、 それらを延々と調べるのは結構大変だ。 もっとまとまった情報は、例えば日本MySQLパートナー会の http://www.mysql-partners-jp.biz/techinfo/tech_01.html が参考になろう。ここでは簡単に説明しておこう。

cp932というのは、要するに Microsoft の Windows の文字コード体系である。 cp932は、当初は5.0系列だけの予定だったらしいが、反響がよかったらしく、 4.1の最新版には入っていると伝え聞いている。

eucjpmsは、 そのネーミングから明かにEUC-JPのMicrosoft版であることが推察できる。

Googleで探したら、eucjpms よりも eucjp-msの方が良くひっかかり、 http://www2d.biglobe.ne.jp/~msyk/charcode/cp932/eucJP-ms.html が見つかった。 この説明によると、eucJP-msは 「TOG/JVC (オープン・グループ / 日本ベンダ協議会) CDE/Motif 技術検討 WG が定めたコードセット名」 とのこと。


なぜ sjisは変に変換されてしまったか?

MySQL では、4.1以降、キャラクタセットは unicodeが基本になっている。 ということは、ユニコードの情報を調べなくてはならない。

ユニコードの総本山   http://www.unicode.org/

ユニコード関連の情報がたっぷりあって、ここのサイトの利用の仕方は 憶えておくと色々助かることがあるのだが、ここでは割愛する。

さて、このunicode.orgサイトの中に、Shift-JIS to Unicode http://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/JIS/SHIFTJIS.TXT というファイルが用意されている。 (www.unicode.org は何故かしばしばダウンしている)

このファイルをじっくり見ると、ちょっと気になることがある。

0x5C    0x00A5  # YEN SIGN
0x7E    0x203E  # OVERLINE

カラムのフォーマットは

#       Format:  Three tab-separated columns
#                Column #1 is the shift-JIS code (in hex)
#                Column #2 is the Unicode (in hex as 0xXXXX)
#                Column #3 the Unicode name (follows a comment sign, '#')

とあるので、左から シフトJIS、Unicode(16進数表記)、Unicode名称 の順である。

unicodeの 0x00A5, 0x203E はそれぞれ 0xC2A5, 0xE280BE になる。

Unicodeの変換には、Unihan Database http://www.unicode.org/charts/unihan.html を使うと便利だ。

ここから先を mysql で追いかけても良いのだが、Unicodeのコード変換表が 明らかに日本人の常識では疑わざるを得ないようになっているのは分った。 つまり、MySQLの変換はUnicodeの仕様にはきちんと対応しているのだが、 Unicodeの仕様そのものに問題が色々あるということだ。

という訳で、奇妙な変換の原因追及はこの辺りで止めておく。 もっとさぐりたい人は、どんどんやってみてください。


cp932とeucjpmsの使い方

さて、話を元に戻して、新しいキャラクタセットの使い方を考えよう。

現在使っている文字ターミナルはgnome-terminlで、Character Encoding には cp932 あるいはそれに似たものもない。 ということで、mysqlでcp932を指定したときは、 端末のCharacter EncodingをSHIFT-JISにして使うことにする。

同様に、eucjpmsあるいはそれに似たものも当然のようにないので、 mysqlでeucjpmsを指定したときには、文字ターミナルは 端末のCharacter EncodingをEUC-JPにして使うことにする。

cp932 ----- SHIFT-JIS

eucjpms ----- EUC-JP

では、簡単にテストをしておこう。

まず文字端末を SHIFT-JIS に設定する。

念のため、sjisでの動作を再確認しよう。

mysql> SET NAMES sjis;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT '\\';
+----+
| \ |
+----+
| \  |
+----+
1 row in set (0.00 sec)

次に、cp932に指定して動作がどう変るか見てみよう。

mysql> SET NAMES cp932;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT '\\';
+---+
| \ |
+---+
| \ |
+---+
1 row in set (0.00 sec)

何だか正しいようである。\が\に化けていたのが、化けなくなったようだ。

やれやれ、何とかなりそうなので、今日はここまでとしよう。


戻る:全角の〜が半角の~に文字化けする(続編)

次へ:バックスラッシュ(\,5C)の文字化けは直ったか


フィードバック:

Name:
Comment:

There is no comment.

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

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