MySQLでデータベースを作るときに utf8mb4_general_ci
っていうのを指定している例があって、なんだこれ?って思ったので調べてみた。
照合順番らしい
そう。照合順番らしい。
・・・・・・
全然わからん。で、もう少し調べると、DBのデータは文字コードとソート順番を持っていて、そのソート順のことをCollationと呼ばれるらしい。
文字コードごとに照合順番を定義しているらしい。
ふむ。なるほど。
具体的にどういうときに指定するのか?
主に
- 大文字小文字を区別しない
- 大文字小文字を区別する
- バイナリ、大文字小文字を区別する
というのが指定できる。
あいまいな検索のほうが都合いい場合もあるし、厳密な比較のほうが都合がいい倍もあるし。そういう時に使い分けることになる。
指定しないとどうなるのか?
テーブルやDBとか作るときに COLLATE を指定しないで作ることもできる。
その場合どうなるのか?を調べてみたら公式ドキュメントにはこう書いてあった。
・CHARACTER SET X と COLLATE Y の両方が指定されている場合、文字セット X と照合順序 Y が使用されます。
・CHARACTER SET X は指定されているが COLLATE は指定されていない場合、文字セット X とそのデフォルト照合順序が使用されます。各文字セットのデフォルトの照合順序を確認するには、SHOW COLLATION ステートメントを使用します。
・COLLATE Y は指定されているが CHARACTER SET は指定されていない場合、Y に関連付けられた文字セットと照合順序 Y が使用されます。
・これ以外の場合は、データベース文字セットとデータベース照合順序が使用されます。
なるほど。DBとして文字コード毎にデフォルトのCOLLATEを持っていて、それが使われるってことですね。
納得。