MySQL: utf8mb4_unicode_ci vs utf8mb4_unicode_520_ci | 選び方と違いを徹底解説

2024-04-02

MariaDB/MySQLにおける utf8mb4_unicode_ci と utf8mb4_unicode_520_ci 照合順序の違い

MariaDB/MySQLで利用可能な文字コード utf8mb4 には、いくつかの照合順序が存在します。その中でも、utf8mb4_unicode_ciutf8mb4_unicode_520_ci は、どちらも Unicode 文字の比較に使用されますが、いくつかの重要な違いがあります。

主な違い

項目utf8mb4_unicode_ciutf8mb4_unicode_520_ci
バージョンMySQL 5.5.3 で導入MySQL 8.0.17 で導入
Unicode バージョンUnicode 6.3.0 に準拠Unicode 13.0 に準拠
照合規則大文字・小文字を区別せず、アクセント記号も無視大文字・小文字を区別し、アクセント記号も考慮
使用例データベースの初期バージョンで作成されたデータ最新の Unicode 文字を含むデータ

詳細

  • utf8mb4_unicode_ci は、MySQL 5.5.3 で導入された古い照合順序です。Unicode 6.3.0 に準拠しており、大文字・小文字を区別せず、アクセント記号も無視します。そのため、古いデータベースや互換性を重視する環境で使用されます。

どちらの照合順序を選択すべきかは、データベースの要件によって異なります。

  • 古いデータベースや互換性を重視する環境では、utf8mb4_unicode_ci を選択します。
  • 最新の Unicode 文字を含むデータや、より正確な文字比較が必要な環境では、utf8mb4_unicode_520_ci を選択します。

補足

  • 上記の情報に加えて、MariaDB/MySQL のバージョンによって、利用可能な照合順序が異なる場合があります。詳細は、それぞれのドキュメントを参照してください。
  • 照合順序を変更する場合は、データベースの互換性に影響を与える可能性があるため、注意が必要です。



-- utf8mb4_unicode_ci を使用する例

CREATE TABLE example (
  name VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
);

INSERT INTO example (name) VALUES ('山田太郎');
INSERT INTO example (name) ('やまだたろう');

SELECT * FROM example;

-- 結果:
--
-- name
-- ----
-- 山田太郎
-- やまだたろう

-- utf8mb4_unicode_520_ci を使用する例

CREATE TABLE example (
  name VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci
);

INSERT INTO example (name) VALUES ('山田太郎');
INSERT INTO example (name) ('やまだたろう');

SELECT * FROM example;

-- 結果:
--
-- name
-- ----
-- 山田太郎
--

上記のサンプルコードでは、utf8mb4_unicode_ciutf8mb4_unicode_520_ci の両方の照合順序を使用して、テーブルを作成し、データの挿入と検索を行っています。

utf8mb4_unicode_ci の場合、山田太郎やまだたろう は同じとみなされます。これは、utf8mb4_unicode_ci は大文字・小文字を区別しないためです。

実行結果

上記のサンプルコードを実行すると、以下の結果が出力されます。

-- utf8mb4_unicode_ci を使用する例

name
----
山田太郎
やまだたろう

-- utf8mb4_unicode_520_ci を使用する例

name
----
山田太郎

  • 上記のサンプルコードは、あくまでも例です。実際の使用例に合わせて、コードを変更する必要があります。



MariaDB/MySQLにおける utf8mb4_unicode_ci と utf8mb4_unicode_520_ci 照合順序の違いを比較する他の方法

これらのドキュメントには、それぞれの照合順序の詳細な説明が記載されています。

比較ツールを使用する

https://www.diffchecker.com/ などのオンラインツールを使用して、2つの照合順序を比較することができます。

データベースを実際に作成して比較する

実際にデータベースを作成し、それぞれの照合順序を使用してデータの挿入と検索を行うことで、違いを体感することができます。

専門家に相談する

上記の方法で違いを理解できない場合は、データベースの専門家に相談することを検討してください。

  • 照合順序は、データベースの重要な設定です。変更する前に、その影響を理解しておくことが重要です。
  • 上記の情報は参考用です。実際の使用例に合わせて、情報を取捨選択する必要があります。

mysql unicode mariadb


ORDER BY RAND() を使ってランダムサンプルを取得する

概要ORDER BY RAND() を使用すると、ランダムな順序でレコードを取得できます。例このクエリは、テーブル名 テーブルからランダムに1レコードを取得します。注意点ORDER BY RAND() は、テーブル内のすべてのレコードをスキャンするため、大規模なテーブルの場合、パフォーマンスが低下する可能性があります。...


INSERT、REPLACE、UPSERTを使いこなす:MySQL既存行の操作

主キーまたはユニークキーを使用して特定の行を挿入この方法は、主キーまたはユニークキー値を使用して、挿入する行を明確に指定する場合に適しています。構文は以下の通りです。例:SELECTステートメントを使用して既存の行から値を取得補足:上記の例では、VALUES句とSELECT句の列順序が一致している必要があります。...


MySQLのOFFSET句で最初のN行をスキップして最後のN行を選択する方法

MySQLデータベースから最後のN行を選択するには、いくつかの方法があります。方法LIMIT句を使用するこれは最も簡単な方法です。このクエリは、テーブル名テーブルから、id列に基づいて降順に並べ替えた最後のN行を選択します。サブクエリを使用する...


データベーススキーマ設計の罠:Laravelマイグレーションで起こる「ユニークキーが長すぎる」エラーの正体とは?

Laravelマイグレーションにおいて、「ユニークキーが長すぎる」というエラーが発生することがあります。このエラーは、MySQLデータベースのデフォルトのインデックス長を超えている場合に発生します。エラーの原因このエラーの原因は、MySQLデータベースのデフォルトのインデックス長が制限されていることにあります。MySQL 5.7以前では、インデックスの長さは最大767バイトに制限されています。一方、Laravel 5.4以降では、デフォルトの文字セットであるUTF8mb4を使用しており、これは1バイトで4文字まで表現できます。そのため、長い文字列を含むユニークキーを作成しようとすると、インデックス長の上限を超えてしまう可能性があります。...


MariaDBにおける条件付きユニーク制約の利点と使用方法

条件付きユニーク制約は、以下のような利点があります。データの整合性を向上させるデータの重複を防ぐ特定の条件に基づいてユニーク性を検証する以下の例は、usersテーブルにemailとcountry列に基づいて条件付きユニーク制約を作成する方法を示しています。...


SQL SQL SQL SQL Amazon で見る



TINYINT(1) vs BOOLEAN: MySQLでブール値を格納するデータ型

TINYINT(1): 1バイトの整数型で、0または1の値を格納できます。BOOLEAN: TRUEまたはFALSEの値を格納できます。どちらのデータ型を使用しても、ブール値を格納することはできますが、それぞれ異なる特性があります。TINYINT(1) の特性


大文字小文字・アクセント記号に注意!utf8_general_ciとutf8_unicode_ciの比較

MySQLデータベースでは、文字列の比較や照合順序を定義するために「照合順序」と呼ばれる設定を使用します。utf8_general_ciとutf8_unicode_ciは、どちらもUTF-8文字エンコーディングを使用する照合順序ですが、文字の比較方法に違いがあります。


徹底解説!MySQLの整数データ型:TINYINT、SMALLINT、MEDIUMINT、BIGINT、INT の違い

データ型と格納できる値の範囲データ型とメモリ使用量上記の表の通り、データ型によって必要なメモリ量が異なります。一般的に、格納できる値の範囲が広くなるほど、必要なメモリ量も増えます。データ型と処理速度データ型によって、データの比較や演算処理速度にも違いが生じます。一般的に、必要なメモリ量が少ないデータ型の方が処理速度が速くなります。


MySQLで発生する「Illegal mix of collations」エラーの徹底解説

MySQLで「Illegal mix of collations」エラーが発生した場合、複数の原因が考えられます。このエラーは、異なる照合順序を持つカラムを比較しようとした時に発生します。原因異なる照合順序を持つカラムを比較しようとしている


データベースの達人になるための道:MySQLにおけるデータベースとスキーマの深い理解

データベースは、データを論理的にまとめたものです。書籍で言えば、一冊の本全体がデータベースに相当します。スキーマは、データベース内のテーブルやビューなどの構造を定義したものです。書籍で言えば、目次や章立て、各ページの構成などがスキーマに相当します。


保存データに絵文字が含まれる?MySQLでutf8mb4を使うべき理由

utf8: 1〜3バイトで文字を表現utf8mb4はutf8よりも多くのバイトを使用できるため、絵文字や特殊文字など、より幅広い文字を表現できます。utf8: 多くの古いシステムやソフトウェアと互換性があるutf8mb4: 比較的新しい文字コードであり、すべてのシステムやソフトウェアでサポートされているわけではない