ゆう's Blog
utf8mb4_general_ci と utf8mb4_unicode_ci

1. utf8mb4_general_ci

特徴:
一般的な(general)目的で設計された照会順序。
大文字・小文字を区別しない(ci = case insensitive)。
比較やソートの処理が軽量で高速。
動作の簡易性:
複雑なユニコードルールを無視し、簡易的な方法で文字列比較を行います。
特殊な文字やアクセントの扱いが少し粗くなる(例: "ö" と "o" を同一視するなど)。
適している場面:
速度重視の場合。
言語の細かな違いにこだわらない単純な文字列比較が必要な場面。

2. utf8mb4_unicode_ci

特徴:
ユニコード標準(Unicode Collation Algorithm)に基づいた照会順序。
より正確で複雑な文字列比較を実現。
大文字・小文字を区別しない(ci = case insensitive)。
アクセントや特殊文字の正確性:
特殊なアクセント記号や文字の違いを認識する(例: "ö" と "o" は異なる文字と認識)。
適している場面:
多言語対応が必要な場合。
言語に固有の文字の違いを正確に扱いたい場面。

性能の違い

utf8mb4_general_ciは比較処理が軽量で高速ですが、文字列の正確性を犠牲にしています。
utf8mb4_unicode_ciはユニコード標準に準拠するため、比較処理が少し重くなりますが、文字列の正確性が向上します。

選択のポイント

utf8mb4_general_ciを選ぶべき場合:
パフォーマンスを重視し、細かな文字の違いが重要でない場合。

utf8mb4_unicode_ciを選ぶべき場合:
多言語データや特殊文字を扱う場面で、正確な文字列比較が必要な場合。

例えば、日本語や絵文字を含むデータを扱う場合には、ユニコードの標準的な動作を提供するutf8mb4_unicode_ciが適しています。

utf8mb4_binについて

utf8mb4_binは、大文字小文字を区別しながらも、文字列の並べ替え(ソート)を行うことができます。ただし、並べ替えはバイナリ値(文字の内部表現)に基づいて行われるため、言語や文化に依存した「辞書順」の並べ替えとは異なります。

utf8mb4_binは、文字列をバイト単位で評価します。
この結果、文字列の内部バイナリ値に基づいてソートされます。
例えば、ASCIIコードで「A」が「a」より小さいため、utf8mb4_binでは「A」が「a」の前に来ます。