Laravel の MySQL の DB の 照合順序 (Collation) は何にすべきか?
Laravel で MySQL を使う場合、DBをまず作成しないといけないがその時に指定する Collation って何を指定すればいいの?と思ったので調べた。
まず、デフォルトでは、 utf8mb4_general_ci になる。
んで、これを選ぶと面倒なのは最後の ci 。
ciって何?と思ったら case insensitive の略で大文字小文字を区別しない、ということ。
この状態でDBを作ると例えば where 句 で絞り込むときに大文字小文字を区別しなくなる。
普通は大文字小文字は区別すると思っているからびっくりするだろう。
大文字小文字を区別したかったら、 utf8mb4_bin を設定しよう!
DBはそのままにテーブルごとに指定する
Laravel で DBテーブルを作るなら、 Migration を使うのが一般的。
その時に、
$table->collation = 'utf8mb4_bin';
と設定したら、DBは utf8mb4_general_ci でもこのテーブルは utf8mb4_bin にすることができる。
が、実際やってみたら外部参照キーを指定していたテーブルだったためエラーになった。
例えばAというテーブルが utf8mb4_general_ci で そこのカラムを外部参照しているテーブルBを上記の方法で utf8mb4_bin にする、といったことは許されない、ということだ。
外部参照したいなら Collation は揃えないといけない。
以上。