照合順序をutf8_unicode_ciにしない理由の一つ
utf8_unicode_ciとutf8_general_ci
どっちにするのか、ちょっと悩みましたが、最近よく言われるのは全文検索の場合
正確性を求めるならutf8_unicode_ci
速度を求めるならutf8_general_ci
ということになるらしいです。
utf8_unicode_ciにしない理由の一つ?
それはLIKE文を書く際の「\」文字に対する処理にあります。
どうやらutf8_unicode_ciにしたフィールドに対する全文検索は下記の書き方だと「\」が検出できなくなっています!
Select * from table where `utf8_unicode_ci` LIKE '%\\\\%';
- 具体的にこのようなテーブルがあるとします。
- このような値が格納されています。
- そしてSQL文を発行してみます。
- 「utf8_general_ci」に「\」を含むレコードを検索します。
Select * from table where `utf8_general_ci` LIKE '%\\\\%';
結果:
-
- 今度は「utf8_unicode_ci」に「\」を含むレコードを検索します。
Select * from table where `utf8_unicode_ci` LIKE '%\\\\%';
結果:
なんと!空行でした!これは何なんでしょう?わかる方がいらっしゃいましたらぜひ、教えてください!
- ちなみに、下記のように「\」の前の文字を含めればちゃんと結果が出てきます!
Select * from table where `utf8_unicode_ci` LIKE '%字\\\\%';
結果:
原因がわかる方がいらっしゃいましたらぜひ、ぜひ教えてください!