疑問
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を指定できる。