散々、書かれていることで、何度もでてくる話なので、自分用にまとめ。
文字コード
まずMySQLの文字コードですが絵文字のみでなく、JIS X 0213の第3・4水準漢字の
一部にUTF8 4バイト文字があり(まぁまず使われないと思いますが)、
MySQLの文字コードはこれからはutf8mb4一択のようです。
charsetは、サーバ、クライアント、サーバー/クライアント感の接続、データベース、、テーブル、カラムで個別に指定でき、
問題を起こさないようにするには、すべて揃えたほうが無難であります。
character_set_server=utf8mb4
character_set_client=utf8mb4
character_set_connection=utf8mb4
character_set_database=utf8mb4
character_set_results=utf8mb4
参考:
https://www.slideshare.net/tmtm/mysql-62004569
Collation
で、問題のCollationですが、utf8mb4で指定できるCollationは
utf8mb4_general_ci
utf8mb4_unicode_ci
utf8mb4_unicode_520_ci
utf8mb4_bin
の4種類がCollationの候補ですが、
utf8mb4_general_ci
A = a 区別しない
= 区別しない
は≠ぱ≠ば 区別する
utf8mb4_unicode_ci
A = a 区別しない
= 区別しない
は=ぱ=ば 区別しない
utf8mb4_unicode_520_ci
A = a 区別しない
≠ 区別する
は=ぱ=ば 区別しない
utf8mb4_bin
A ≠ a 区別する
≠ 区別する
は≠ぱ≠ば 区別する
区別するしないはwhere句やJoin、ソート順で影響がでます。
要件によると思うのですが、utf8mb4_general_ciかutf8mb4_binが選択肢として候補になり、制約条件付きで提案してどちらかでOKをもらう(誰に)