MySQL での utf8mb4 照合の例

MySQL での utf8mb4 照合の例

MySQL における一般的な utf8mb4 ソート規則は次のとおりです。

  • utf8mb4_0900_ai_ci
  • utf8mb4_unicode_ci
  • utf8mb4_general_ci

テーブルのデフォルトの文字セットが utf8mb4 に設定されているが、照合順序が明示的に指定されていない場合:

  • MySQL バージョン 5.7 では、デフォルトの照合順序は utf8mb4_general_ci です。
  • MySQL バージョン 8.0 では、デフォルトの照合順序は utf8mb4_0900_ai_ci です。

utf8mb4_0900_ai_ci 照合順序は MySQL 8.0 で導入された照合順序であるため、MySQL 8.0 テーブルを MySQL 5.7 または MySQL 5.6 にインポートすると、文字セットが認識されない可能性があります。

[エラー] 1273 - 不明な照合順序: 'utf8mb4_0900_ai_ci'

パラメータ制御

MySQL バージョン 5.6 では、collat​​ion_server パラメータを使用して、サーバー レベルでデフォルトの照合順序を設定します。

  • サービスの開始時に collat​​ion_database パラメータの値が指定されていない場合は、collat​​ion_server パラメータの値がデフォルトで継承されます。
  • データベースの作成時に照合が指定されていない場合は、collat​​ion_database パラメータの値がデフォルトで使用されます。

character_set_database および collat​​ion_database パラメータは MySQL 5.7 では非推奨となり、以降のバージョンでは削除される予定です。
MySQL は、utf8mb4 文字セットを使用する際のデフォルトの照合を制御するために、新しいパラメータ default_collat​​ion_for_utf8mb4 を追加しました。値は utf8mb4_0900_ai_ci または utf8mb4_general_ci です。
default_collat​​ion_for_utf8mb4 パラメータは、次の条件で有効になります。

  • SHOW COLLATION コマンドおよび SHOW CHARACTER SET コマンドを使用する場合。
  • ライブラリを作成または変更する場合は、utf8mb4 を指定しますが、エンコード規則は指定しないでください。
  • テーブルを作成または変更するときは、utf8mb4 を指定しますが、エンコード ルールは指定しないでください。
  • 列を追加または変更する場合は、utf8mb4 を指定しますが、エンコード規則は指定しないでください。
  • その他は utf8mb4 を使用しますが、エンコード規則は指定しません。

utf8mb4_unicode_ci と utf8mb4_general_ci の比較

1. 正確性

  • utf8mb4_unicode_ci ソート規則は、標準の Unicode ソートと比較に基づいており、特殊文字を処理でき、さまざまな言語で正確にソートできます。
  • utf8mb4_general_ci ソート規則は標準の Unicode に基づいていないため、一部の特殊文字を処理できません。

2. パフォーマンス

  • utf8mb4_general_ci照合順序はソートパフォーマンスが比較的良好である
  • utf8mb4_unicode_ci ソートルールは、特殊文字を処理するために複雑なソートアルゴリズムを実装しており、パフォーマンスはわずかに低下します。
  • ほとんどのシナリオでは、両者の間に大きなパフォーマンスの違いはありません。

補足: MySQL - utf8mb4 と等価値クエリ テスト

テストスクリプト

## テストテーブルを削除します。DROP TABLE IF EXISTS tb2001;
tb2002 が存在する場合はテーブルを削除します。
tb2003 が存在する場合はテーブルを削除します。

## テストテーブルを作成する CREATE TABLE tb2001(
id INT AUTO_INCREMENT 主キー、
c1 VARCHAR(100) 照合utf8mb4_unicode_ci、
c2 VARCHAR(100) 照合utf8mb4_bin
)ENGINE=INNODB デフォルト文字セット=utf8mb4 ;

テーブルtb2002を作成します(
id INT AUTO_INCREMENT 主キー、
c1 VARCHAR(100) COLLATE utf8mb4_general_ci,
c2 VARCHAR(100) 照合utf8mb4_bin
)ENGINE=INNODB デフォルト文字セット=utf8mb4;

テーブルtb2003を作成します(
id INT AUTO_INCREMENT 主キー、
c1 VARCHAR(100) 照合utf8mb4_0900_ai_ci、
c2 VARCHAR(100) 照合utf8mb4_bin
)ENGINE=INNODB デフォルト文字セット=utf8mb4;

## テストデータを挿入します INSERT INTO tb2001(c1,c2) ​​VALUES(0xF09F8D83,0xF09F8D83),(0xF09FA68A,0xF09FA68A),(0xF09F8CA0,0xF09F8CA0);
tb2002(c1,c2)に値(0xF09F8D83,0xF09F8D83),(0xF09FA68A,0xF09FA68A),(0xF09F8CA0,0xF09F8CA0)を挿入します。
tb2003(c1,c2)に値(0xF09F8D83,0xF09F8D83),(0xF09FA68A,0xF09FA68A),(0xF09F8CA0,0xF09F8CA0)を挿入します。

## 同等性クエリテスト SELECT * FROM tb2001 WHERE c1=0xF09F8D83;
tb2002 から * を選択 c1=0xF09F8D83;
tb2003 から * を選択 c1=0xF09F8D83;

tb2001 から * を選択 c2=0xF09F8D83;
tb2002 から * を選択 c2=0xF09F8D83;
tb2003 から * を選択 c2=0xF09F8D83;

テスト結果

mysql> SELECT * FROM tb2001 WHERE c1=0xF09F8D83;
+----+------+------+
| id | c1 | c2 |
+----+------+------+
| 1 | 🍃 | 🍃 |
| 2 | 🦊 | 🦊 |
| 3 | 🌠 | 🌠 |
+----+------+------+
セット内の 3 行 (0.00 秒)

mysql> SELECT * FROM tb2002 WHERE c1=0xF09F8D83;
+----+------+------+
| id | c1 | c2 |
+----+------+------+
| 1 | 🍃 | 🍃 |
| 2 | 🦊 | 🦊 |
| 3 | 🌠 | 🌠 |
+----+------+------+
セット内の 3 行 (0.01 秒)

mysql> SELECT * FROM tb2003 WHERE c1=0xF09F8D83;
+----+------+------+
| id | c1 | c2 |
+----+------+------+
| 1 | 🍃 | 🍃 |
+----+------+------+
セット内の 1 行 (0.00 秒)

マイSQL> 
mysql> SELECT * FROM tb2001 WHERE c2=0xF09F8D83;
+----+------+------+
| id | c1 | c2 |
+----+------+------+
| 1 | 🍃 | 🍃 |
+----+------+------+
セット内の 1 行 (0.00 秒)

mysql> SELECT * FROM tb2002 WHERE c2=0xF09F8D83;
+----+------+------+
| id | c1 | c2 |
+----+------+------+
| 1 | 🍃 | 🍃 |
+----+------+------+
セット内の 1 行 (0.00 秒)

mysql> SELECT * FROM tb2003 WHERE c2=0xF09F8D83;
+----+------+------+
| id | c1 | c2 |
+----+------+------+
| 1 | 🍃 | 🍃 |
+----+------+------+
セット内の 1 行 (0.00 秒)

テストの概要

  • utf8mb4 文字セットを使用すると、絵文字などの特殊文字を保存できます。
  • utf8mb4_unicode_ci および utf8mb4_general_ci 照合は、特殊文字に「正しく一致」しません。
  • utf8mb4_0900_ai_ci 照合は特殊文字を「正しく一致」させることができますが、MySQL バージョン 8.0 にのみ適用されます。
  • utf8mb4_bin ソートルールは、バイナリ システムに基づいて特殊文字を一致させ、特殊文字を「正しく一致」させることができ、MySQL のすべてのバージョンに適用できます。

これで、MySQL の utf8mb4 ソート規則に関するこの記事は終了です。MySQL の utf8mb4 ソートの詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Linux システムで MySQL の文字セットを UTF8 に変更する手順
  • MySQL エンコーディング utf8 および utf8mb4 utf8mb4_unicode_ci および utf8mb4_general_ci
  • MySQL データベースのエンコーディングを utf8mb4 に変更する方法
  • mysql charset=utf8 本当に意味が分かりますか
  • MySQL の文字セット utf8 を utf8mb4 に変更する方法
  • mysql 文字化けした文字 latin1 文字を UTF8 に変換 詳細

<<:  フォームのデフォルトの送信方法を変更する方法

>>:  JavaScript フロントエンドのタイムアウト非同期操作に最適なソリューション

推薦する

CSS を解析して画像のテーマカラー機能を抽出する (ヒント)

背景すべては、WeChat 技術グループのクラスメートが「写真の主な色を取得する方法はあるか」と尋ね...

MySQL 8.0.18 ハッシュ結合は左/右結合をサポートしていません 左と右の結合の問題

MySQL 8.0.18 では、インデックスが作成されていないフィールドに適用でき、等価値の関連付け...

IDEA は MySQL への接続時にエラーを報告します。サーバーが無効なタイムゾーンを返します。タブに移動して serverTimezone プロパティを設定してください。

これからの道は常に困難で、棘だらけです。歯を食いしばって、乗り越えられると信じてください。さあ、さあ...

Linuxのバージョン情報を復号化する方法

Linux バージョンに関する情報を表示および解釈するのは、見た目よりも少し複雑です。単純なバージョ...

Docker イメージのエクスポート、インポート、コピーの例の分析

最初の解決策は、イメージを公開イメージリポジトリにプッシュし、それをプルダウンすることです。 2 番...

DIV の一般的なタスク (パート 1) — 一般的なタスク (スクロール バーの表示、div の非表示、イベント バブリングの無効化など)

最も一般的に使用されるレイアウト要素として、DIV は Web 開発において重要な役割を果たします。...

HTML タグのセマンティクス化 (H5 を含む)

導入HTML は、Web ドキュメントのコンテンツのコンテキスト構造と意味を提供します。HTML 自...

MySQL5.6.17データベースをインストールするときにMy.iniファイルを構成する方法

最近、プロジェクトの開発時に MySql データベースを使用しました。MySql に関する記事をいく...

MySqlのインストールとログインの詳細な説明

LinuxにMySQLがすでにインストールされているかどうかを確認する sudo service m...

CSS3 で実装された価格表

結果: 実装コードhtml <div id="価格表" class=&qu...

MySQL の制限使用法とページングクエリステートメントのパフォーマンス分析の詳細な説明

使用制限クエリ ステートメントを使用する場合、多くの場合、データの最初の数行または中間行を返す必要が...

Win 8 以降での最新の MySQL バージョン 5.7.17 (64 ビット ZIP グリーン バージョン) のインストールと展開のチュートリアル

まず、ブロガーはコミュニティ バージョンをプレイしていますが、学習とテストにはこれで十分です。 Bl...

CSS3を使用して背景画像の色を変更するさまざまな方法

CSS3 では画像の色を変更できます。これからは複数の絵をデザインする必要がなくなり、いつでも修正で...

ソフトウェア テスト - MySQL (VI: データベース関数)

1.MySQL関数1. 数学関数PI() # 円周率 (pi) の値を返します。デフォルトの小数点...