疑問
Laravelプロジェクトにおいて、データベースの新規作成をphpmyadminを使って実施したときに、文字コードについてはそこまで注意しておらずデフォルトのままutf8mb4_general_ci
を利用してきた。
しかし、あるとき疑問に思った。そのあとについてくるgeneral_ciは何だと。
結論
SQLにはcharsetとcollationがある。
-
utf8mb4_general_ci
の、utf8mb4
はcharsetを、general_ci
はcollation(照合順序)を表す。 - 日本語でWebページを作る場合は、
utf8mb4_general_ci
で良いことがわかった。 -
config/database.php
の文字コードの設定を見ると、デフォルトではutf8mb4_unicode_ci
となっている。これを以下のように変更しておくと、作成されるテーブルはutf8mb4_general_ci
で作られる。config/database.php'mysql' => [ //中略 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_general_ci', //'utf8mb4_unicode_ci'から変更した //中略 ],
- 個別にテーブル作成時のマイグレーションファイルに、
$table->collation = 'utf8mb4_general_ci';
とすることでもcollationを指定できる。