Open1
DB (MySQL) の文字コード(charset)と照合順序(collation)について
文字コード(charset)と照合順序(collation)の確認
MySQLで使用できる文字コード(charset)の確認
MySQLでは複数のCharset(文字セット)を使うことができ、その環境で使用できるCharsetは以下で確認できます。
mysql> show character set;
MySQLで使用できる照合順序(collation)の確認
mysql> show collation;
「データベース」「テーブル」「カラム」単位で文字コードを確認
-- databaseの文字コード確認
show create database [database_name]
-- tableの文字コード確認
show create table [table_name];
文字コードの選定について
- MySQLの文字コードは、日本語対応を考えると基本的には
utf8mb4
一択。 - charsetは、サーバ、クライアント、サーバー/クライアント感の接続、データベース、、テーブル、カラムで個別に指定でき、
問題を起こさないようにするには、すべて揃えたほうが無難であります。
character_set_server=utf8mb4
character_set_client=utf8mb4
character_set_connection=utf8mb4
character_set_database=utf8mb4
character_set_results=utf8mb4
照合順序(collation)の選定について
utf8mb4
で指定できる照合順序(collation)の選定を考える。
utf8mb4_general_ci
utf8mb4_unicode_ci
utf8mb4_unicode_520_ci
utf8mb4_bin
utf8mb4_ja_0900_as_cs
の5種類がCollationの候補の場合。。。
1. utf8mb4_general_ci
A = a 区別しない
🍣 ≠ 🍺 区別しない
は≠ぱ≠ば 区別する
2. utf8mb4_unicode_ci
A = a 区別しない
🍣 ≠ 🍺 区別しない
は=ぱ=ば 区別しない
3. utf8mb4_unicode_520_ci
A = a 区別しない
🍣 ≠ 🍺 区別する
は=ぱ=ば 区別しない
4. utf8mb4_bin
A ≠ a 区別する
🍣 ≠ 🍺 区別する
は≠ぱ≠ば 区別する
5. utf8mb4_ja_0900_as_cs
A ≠ a 区別する
🍣 ≠ 🍺 区別する
は ≠ ぱ ≠ ば 区別する
比較表
照合順序 | Aとaの比較 | 🍣と🍺の比較 | は、ぱ、ばの比較 | 特徴 |
---|---|---|---|---|
utf8mb4_general_ci | 区別しない | 区別しない | 区別する | 一般的な用途向け。パフォーマンスが良い。 |
utf8mb4_unicode_ci | 区別しない | 区別しない | 区別しない | Unicode標準に基づく広範な言語対応。 |
utf8mb4_unicode_520_ci | 区別しない | 区別する | 区別しない | 新しいUnicodeバージョンに基づく。 |
utf8mb4_bin | 区別する | 区別する | 区別する | バイナリ比較。大文字小文字やアクセントも区別。 |
utf8mb4_ja_0900_as_cs | 区別する | 区別する | 区別する | 日本語に特化。日本語の正確なソート順序。 |
日本語データのColumnでの照合順序(collation)選定
-
utf8mb4_bin
- 日本語ソートがしたいとかこだわりがなければ、日本語の照合順序(collation)もこちらでもいい。
-
utf8mb4_ja_0900_as_cs
- 日本語でソートしたい場合は、
utf8mb4_ja_0900_as_cs
がおすすめ。- MySQL 8.0 で導入された日本語専用の照合順序で、日本語の正しい順序でソートする。
- 日本語でソートしたい場合は、
英語データのColumnでの照合順序(collation)選定
-
utf8mb4_bin
- 文字列をバイト単位で比較、大文字小文字を区別し、より高速なパフォーマンスを提供する。
参考・引用