MySQL

MySQLの文字コードとCollation

More than 1 year has passed since last update.

散々、書かれていることで、何度もでてくる話なので、自分用にまとめ。


文字コード

まず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 区別しない

:sushi: = :beer: 区別しない

は≠ぱ≠ば 区別する

utf8mb4_unicode_ci

A = a 区別しない

:sushi: = :beer: 区別しない

は=ぱ=ば 区別しない

utf8mb4_unicode_520_ci

A = a 区別しない

:sushi::beer: 区別する

は=ぱ=ば 区別しない

utf8mb4_bin

A ≠ a 区別する

:sushi::beer: 区別する

は≠ぱ≠ば 区別する

区別するしないはwhere句やJoin、ソート順で影響がでます。

要件によると思うのですが、utf8mb4_general_ciかutf8mb4_binが選択肢として候補になり、制約条件付きで提案してどちらかでOKをもらう(誰に)