MySQLで全角マイナス

MacからMySQLに全角マイナスを含むデータを(phpMyAdminを使って)入力した。例えば「HISA−123」だったとしよう。これをWindowsで検索するとヒットしない。よく調べるとマイナス記号が検索できていないことが判明(部分一致でISAとか23ならヒットする)。

  • MySQL 5.0 (utf8_unicode_ci)
  • PHP 5.0 (UTF-8)

なんでそんなことになるのかいろいろと調べたところ、Macで全角マイナスを入力するとUTF8コード「E28892」(MINUS SIGN)が使われます。ところがWindowsの場合はUTF8コード「EFBC8D」(FULLWIDTH HYPHEN-MINUS)が使われます。

Macで入力した全角マイナス(UTF8コード「E28892」)は全角マイナスとは別の文字とみなされるらしい。というのもMySQLではutf8_unicode_ciで記録しているテーブルの検索は全角と半角を区別しないし類似文字も包括して検索してくれる。例えばカタカナの「ベ」はひらがなの「べ」でも検索できるし、ひらがなの「へ」や「ぺ」でもカタカナの「ヘ」や「ペ」でも半角カタカナの「ヘ」でも「ベ」でも「ペ」でも、「ベ」を検索できる。だから半角マイナスで検索すれば半角だろうが全角だろうがマイナス記号はまとめてヒットする。たしかにWindowsで入力した全角マイナスは、半角マイナスで検索してもヒットする。ところがMacで入力した全角マイナス(UTF8コード「E28892」)はマイナス記号とみなしてくれてないらしい。やっかいな問題だ

とりあえず、MySQLのreplace関数を使って可能性がありそうなカラムのE28892をEFBC8Dに置換するSQL文をときどき実行して対処するしかないのかな。