【MySQL】「照合順序」って何?設定方法を解説!【わかりやすく】

WEB

MySQLであたらしくデータベースを作成する際、「照合順序」っていう項目があるのに気づくと思います。
僕、今までこれ特に何も考えずにスルーしていたのですが、それじゃまずいってことが分かりました!

「ハ」と「パ」と「バ」の扱いが一緒になる

照合順序を何も選択せずにデータベースを作成すると「utf8_unicode_ci」という項目がデフォルトで選ばれることになります!
(昔は「utf8_general_ci」がデフォルトで選ばれていたらしいヨ!)

「utf8_unicode_ci」では、イマイチ日本語のことを考慮されていないようで「ハ」と「パ」と「バ」の扱いが一緒になるという問題があります。なので「utf8_unicode_ci」で「ハハ」と検索した場合「パパ」「ババ」も引っかかってくることになります。

濁点・半濁点が一緒くたにされるのは困りますね〜。
ま、英語圏の人がつくったシステムなので無理もないか。

照合順序は途中で変更するのがメンドウ

すでに運用中のデータベースの照合順序を変更するためには、SQLコマンドで全データの一括変換が必要になります。
メンドウですね!
全データを1つずつ手作業で変更するのももちろんアリですが、より一層メンドウなので僕はおすすめしません。

ALTER DATABASE データベース名 COLLATE utf8_general_ci

※ 【ご注意】↑テストしてません!DBをバックアップした後、自己責任でオネシャス!

結局どの照合順序を選んだらいいの?

「utf8_general_ci」もしくは「utf8mb4_bin」ですね。

「utf8_general_ci」は、濁点・半濁点を区別してくれる照合順序です。
「utf8mb4_bin」は、濁点・半濁点はもちろん絵文字まで区別してくれます。ただしMysql5.5以降対応。

最新のMysqlをお使いなのであれば、「utf8mb4_bin」で問題ないと思います。

「絵文字を入れた状態で検索するなんてことなんてないでしょ、utf8_general_ciで十分」とお考えの方もいらっしゃるでしょうが、僕は結構絵文字をタイトルにいれるので「utf8mb4_bin」が必須です。

照合順序を「utf8mb4_bin」にしておかないと、絵文字はすべて同じもの扱い。もちろん絵文字ソートも出来ません。
僕のような奴は少数派だとは思いますが、そんな奴もいるんだな〜、くらいに捉えておいてくれると嬉しいです。


Category
9WEB