2007.07.25

「5c」問題

前回に引き続きMySQLがらみですが、

AccessからMySQLにデータをインサートしようとした時に、
エラーとなりインサート出来ませんでした。
どうやら原因は5c問題というものらしいです。

これはShift_JISの文字コードの2バイト目が「5c」の文字で起こる問題らしく、
2バイト目が「5c」になる文字は以下のような文字があります。
「表」→「955c」「申」→「905c」「ソ」→「835c」など。
Shift_JISで5cは「\」を表します。

例えば「表示」という文字は、内部的には「表\示」というように解釈されてしまう様です。
実際に遭遇した問題ですが、
「表示」という文字をMySQL上のテーブルにインサートしようとした場合、「'表示'」と書きますが、
この場合、「表」という字が途中にあるので、問題ありません。
しかし、「一覧表」という文字をインサートしようとした場合、
「'一覧表'」と書くことで問題が発生します。
内部的には「'一覧表\'」と解釈されてしまうことで、
シングルコーテーョンがエスケープされてしまうからです。

今回の場合、文字列の後ろに全角スペースをつける事で回避しましたが、
この問題はMySQLやPHPを使う場合、どこかでShift_JISが使われていると
必ず遭遇する問題のようです。

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

photo
osano