collate utf8_unicode_ci
utfbm4 のキャラクタコードに対してこの collate を指定するとエラーになる、
Error Code: 1253. COLLATION 'utf8_unicode_ci' is not valid for CHARACTER SET 'utf8mb4'
以下でデーターベースがどうなっているか確認する
SHOW VARIABLES LIKE 'character_set_database'; +------------------------+---------+ | Variable_name | Value | +------------------------+---------+ | character_set_database | utf8mb4 | +------------------------+---------+ 1 row in set (0.00 sec)
データベース、グローバレベルの collation を確認すると、
show global variables like 'collation_server'; +------------------------+--------------------+ | Variable_name | Value | +------------------------+--------------------+ | character_set_database | utf8mb4_0900_ai_ci | +------------------------+--------------------+
MySQL 5.7 のデフォルト・キャラクタコード を utf8mb4 にしていたら
デフォルトの collation は、utf8mb4_general_ci でした。
しかし、MySQL 8.0 以降は、デフォルト・キャラクタコード = utf8mb4 に対して
デフォルトの collation = utf8mb4_0900_ai_ci になります。
0900 は、Unicode のバージョン 9.00 を示してます。
_ai は、Accent Insensitive の略、アクセントの違いを区別しません。
_ci は、Case Insensitive の略、大文字小文字区別しない。
https://dev.mysql.com/doc/refman/8.0/ja/charset-collation-names.html
に、照合の命名規則が書いてあります。
サフィックス | 意味 |
_ai | アクセントを区別しない |
_as | アクセントを区別する |
_ci | 大文字小文字を区別しない |
_cs | Case-sensitive |
_ks | カナを区別する |
_bin | バイナリ |
collation で大文字小文字を区別しない厳格なバイナリ照合なら utf8mb4_bin を使います。
utf8mb4_0900_ai_ci
'あ' → 'ア', 'ア' にマッチする
'は' → 'バ', 'パ' にマッチする
大文字小文字区別しない
utf8mb4_0900_as_ci
'あ' → 'ア', 'ア' にマッチする、
'は' → 'バ', 'パ' にマッチしない
大文字小文字区別しない
utf8mb4_0900_as_cs
'あ' → 'ア', 'ア' にマッチしない
'は' → 'バ', 'パ' にマッチしない
大文字小文字区別する
utf8mb4_0900_ai_cs という照合順序は、存在しません。
utf8mb4_0900_cs という照合順序は、存在しません。
utf8mb4_unicode_ci
'あ' → 'ア', 'ア' にマッチする
'は' → 'バ', 'パ' にマッチする
大文字小文字区別しない
utf8mb4_unicode_cs という照合順序は、存在しません。
utf8mb4_unicode_ai という照合順序は、存在しません。
utf8mb4_unicode_as という照合順序は、存在しません。
utf8mb4_unicode_ai_ci という照合順序は、存在しません。
utf8mb4_unicode_as_ci という照合順序は、存在しません。
utf8mb4_general_ci
'あ' → 'ア', 'ア' にマッチしない
'は' → 'バ', 'パ' にマッチしない
大文字小文字区別しない
utf8mb4_general_cs という照合順序は、存在しません。
また、MySQL のマニュアルに、キャラクタコードセット utf8 を例に以下の説明で記載されてます。
utf8_unicode_ci では、縮約および無視可能な文字もサポートされています。
utf8_general_ci は、拡張、縮小または無視可能な文字をサポートしないレガシー照合です。
文字間で 1 対 1 の比較しかできません。