MySQLでSJIS(CP932)を扱う際の注意

Windowsでは、Shift_JISによく似たCP932(MS932)という文字コードが用いられているわけですが、
CP932には存在している文字、記号がShift_JISには存在しない場合「?」に置き換えられて入力されます。

実は、過去ログ検索を作っているときに最初Shift_JISでテーブルを作っていたのですが、
これの影響で文字化けが起きていることが後で解りました。

CP932の文字をMySQLのテーブルに挿入する方法の一つに
テーブルの照会順序をutf8_unicode_ciに変えることがあり、
CP932に存在して、Shift_JISには存在しない文字、記号が扱えるようになります。

つまり、文字が存在しないならば、文字が存在する文字コードを使えば良いと言うことです。

すべてShift_JISのテーブルに以下のようなSQL文を実行すると盛大に文字化けしてしまうわけですが、
INSERT INTO `hogehoge` VALUES(“1”, “Right Triangle”, “?”);

CP932を扱う列をUTF8にして、以下のように書き直すことで文字化けを防ぐことが出来ます。
INSERT INTO `hogehoge` VALUES(“1”, “Right Triangle”, CONVERT(_cp932 “?” USING utf8));

まぁ、最初からUTF8にすれば良いってだけの話です。

フォローする