MySQL の共通照合ルール utf8mb4_general_ci、utf8mb4_unicode_ci、utf8mb4_bin、utf8mb4_0900_ai_ci、およびストレージ文字セット utf8 および utf8mb4

データベースを作成するとき、多くの場合、データベース名、文字セット、照合順序を入力する必要があります。
この記事では主に、一般的に使用されるストレージ文字セット utf8 と utf8mb4、ソート文字セット utf8mb4_unicode_ci と utf8mb4_general_ci、utf8mb4_bin、utf8mb4_0900_ai_ci について説明します。
ここに画像の説明を挿入

通常、特殊文字の順序はそれほど正確である必要がないため、データベースを作成し、照合順序に utf8mb4_general_ci を使用します。


1. 文字セット utf8 および utf8mb4 を格納する

  • utf8 は Mysql の文字セットで、最大 3 バイトの UTF-8 文字のみをサポートします。これは Unicode の基本的なマルチテキスト プレーンです。
  • Mysql で長さ 4 バイトの UTF-8 文字を保存するには、utf8mb4 文字セットを使用する必要がありますが、バージョン 5.5.3 以降のみがサポートされています。より良い互換性を得るには、常に utf8 ではなく utf8mb4 を使用する必要があると思います。CHAR 型データの場合、utf8mb4 はより多くのスペースを消費します。Mysql 公式の提案によると、CHAR の代わりに VARCHAR を使用してください。

概要:
UTF-8 は、1 ~ 4 バイトの可変長エンコーディング形式と文字エンコーディングを使用します。mb4 はほとんどのバイトが 4 であり、完全な UTF-8 を表すために 4 バイトを使用します。

mysql の utf8 エンコーディングの最大文字長は 3 バイトであり、4 バイトのワイド文字が検出された場合は例外が挿入されます。3 バイト UTF-8 でエンコードできる最大の Unicode 文字は 0xffff で、これは Unicode の Basic Multilingual Plane (BMP) です。つまり、基本マルチテキスト プレーンにない Unicode 文字は、Mysql の utf8 文字セットを使用して保存できません。絵文字表現(絵文字は iOS や Android の携帯電話でよく見られる特別な Unicode エンコードです)、あまり使用されない多くの漢字、および新しい Unicode 文字などが含まれます

MySQL の utf8 は utfmb3 で、3 バイトしかないためスペースは節約されますが、すべての UTF-8 を表現することはできません。したがって、utf8mb4 (utf8 のスーパーセットであり、utf8 と完全な互換性があり、4 バイトでより多くの文字を格納でき、世界中で見られるほぼすべての言語が含まれます。)。


2. 文字セット utf8mb4_unicode_ci および utf8mb4_general_ci、utf8mb4_bin、utf8mb4_0900_ai_ci のソート

一般的に使用される MySQL 照合規則 utf8mb4_general_ci、utf8mb4_unicode_ci、および utf8mb4_bin
ci は大文字と小文字を区別しませんが、これらの規則も大文字と小文字を区別しません。
utf8mb4_unicode_ci :
並べ替えと比較は標準 Unicode に基づいており、さまざまな言語間で正確に並べ替えることができます。Unicode 並べ替えルールは、特殊文字を処理できるようにするために、少し複雑な並べ替えアルゴリズムを実装しています。
utf8mb4_general_ci :
拡張子をサポートしない従来の照合順序であり、文字ごとの比較のみを実行できます。utf8_general_ci 照合順序による比較は高速ですが、utf8mb4_unicode_ci 照合順序を使用した比較よりも精度が低くなります。
utf8mb4_bin :
文字列の各文字をバイナリ データとしてコンパイルして保存します。大文字と小文字は区別され、バイナリ コンテンツを保存できます。
utf8mb4_0900_ai_ci :
MySQL 8.0 のデフォルトは utf8mb4_unicode_ci の 1 つである utf8mb4_0900_ai_ci です。具体的な意味は次のとおりです:
uft8mb4 は UTF-8 エンコーディング スキームを意味し、各文字は最大 4 バイトを占めます。
0900 は Unicode 照合アルゴリズムのバージョンを指します。(Unicode 照合アルゴリズムは、Unicode 標準の要件に準拠する 2 つの Unicode 文字列を比較するために使用される方法です)。
aiはアクセントの無感覚性を指します。つまり、並べ替えの際、e、è、é、ê、および ë の間に違いはありません。
ci は大文字と小文字を区別しないことを意味します。つまり、ソート時には p と P に違いはありません。
MySQL 8.0.1 以降では、utf8mb4_0900_ai_ci がデフォルトの照合順序として、utf8mb4 がデフォルトの文字セットになりました。以前は、utf8mb4_general_ci がデフォルトの照合順序でした。utf8mb4_0900_ai_ci 照合順序がデフォルトになったため、新しいテーブルはデフォルトで基本多言語面の外に文字を格納できます。デフォルトで絵文字を保存できるようになりました。アクセントの区別と大文字と小文字の区別が必要な場合は、代わりに utf8mb4_0900_as_cs を使用できます。

2.1. よく使用される utf8mb4_unicode_ci と utf8mb4_general_ci の違い

1. 精度

utf8mb4_unicode_ci は並べ替えと比較を行うための標準 Unicode に基づいており、さまざまな言語間で正確に並べ替えることができます。

utf8mb4_general_ci は Unicode 照合順序を実装していないため、一部の特殊な言語または文字セットに遭遇した場合、並べ替え結果が一貫性を持たなくなる可能性があります。

ただし、ほとんどの場合、これらの特殊文字の順序はそれほど正確である必要はありません

2. パフォーマンス

utf8mb4_general_ciは比較および並べ替えの際に高速です

utf8mb4_unicode_ci 特殊な場合、Unicode 照合順序では、特殊文字を処理できるようにするために、少し複雑な並べ替えアルゴリズムが実装されます

しかし、ほとんどの場合、そのような複雑な比較は行われません。どの照合順序を選択するかよりも、ユーザーはデータベース内の文字セットと照合順序を統一する必要性のほうを重視する必要があります。

utf8mb4_unicode_ciの使用を推奨しますが、utf8mb4_general_ciでも問題ありません。

おすすめ

転載: blog.csdn.net/munangs/article/details/126617226