MySQL 8.0 リファレンスマニュアル MySQL NDB Cluster 8.0 を含む

このページは機械翻訳したものです。

10.9 Unicode のサポート

Unicode 標準には、Basic Multilingual Plane (BMP) の文字と BMP の外部にある補助文字が含まれています。 このセクションでは、MySQL での Unicode のサポートについて説明します。 Unicode 規格自体の詳細は、「Unicode Consortium の web サイト」を参照してください。

BMP 文字には次の 3 つの特性があります。

補助文字は BMP の外部にあります:

Unicode データをエンコードするための UTF-8 (8 ビット単位の Unicode 変換形式) メソッドは、RFC 3629 に従って実装されます。RFC 3629 には、1 バイトから 4 バイトまでのエンコーディング順序が記述されています。 UTF-8 の概念は、長さの異なるバイトシーケンスを使用してさまざまな Unicode 文字をエンコードするというものです。

MySQL では、次の Unicode 文字セットがサポートされます:

注記

utf8mb3 文字セットは非推奨であり、将来の MySQL リリースで削除される予定です。 かわりに utf8mb4 を使用してください。 utf8 は現在 utf8mb3 のエイリアスですが、ある時点では utf8utf8mb4 への参照になることが予想されます。 utf8 の意味があいまいにならないように、utf8 ではなく文字セット参照に utf8mb4 を明示的に指定することを検討してください。

表10.2「Unicode 文字セットの一般的な特性」 には、MySQL でサポートされている Unicode 文字セットの一般的な特性がまとめられています。

表 10.2 Unicode 文字セットの一般的な特性

文字セット サポートされる文字 文字ごとに必要な記憶域
utf8mb3, utf8 BMP のみ 1 バイト、2 バイトまたは 3 バイト
ucs2 BMP のみ 2 バイト
utf8mb4 BMP および補足 1、2、3 または 4 バイト
utf16 BMP および補足 2 バイトまたは 4 バイト
utf16le BMP および補足 2 バイトまたは 4 バイト
utf32 BMP および補足 4 バイト

BMP の外部の文字は REPLACEMENT CHARACTER と比較され、BMP 文字 (utf8mb3 または ucs2) のみをサポートする Unicode 文字セットに変換される場合は'?'に変換されます。

補助文字をサポートし、BMP 専用の utf8mb3 および ucs2 文字セットより「広い」である文字セットを使用する場合、アプリケーションに互換性のない問題が発生する可能性があります。セクション10.9.8「3 バイト Unicode 文字セットと 4 バイト Unicode 文字セット間の変換」 を参照してください。 このセクションでは、テーブルを (3 バイト)utf8mb3 から (4 バイト)utf8mb4 に変換する方法と、その実行時に適用される制約についても説明します。

類似した一連の照合順序を、ほとんどの Unicode 文字セットで使用できます。 たとえば、それぞれにデンマーク語照合順序があり、その名前は utf8mb4_danish_ci, utf8mb3_danish_ci, utf8_danish_ci, ucs2_danish_ci, utf16_danish_ci および utf32_danish_ci です。 例外は utf16le であり、2 つの照合順序しかありません。 Unicode 照合およびそれらの区別プロパティ (補助文字の照合プロパティを含む) の詳細は、セクション10.10.1「Unicode 文字セット」 を参照してください。

UCS-2、UTF-16、および UTF-32 の MySQL での実装は、ビッグエンディアンのバイト順で文字を格納し、値の先頭にバイト順マーク (BOM) を使用しません。 ほかのデータベースシステムでは、リトルエンディアンのバイト順または BOM を使用していることもあります。 このような場合は、これらのシステムと MySQL 間でデータを転送するときに値の変換を実行する必要があります。 UTF-16LE の実装はリトルエンディアンです。

MySQL は UTF-8 値に BOM を使用しません。

Unicode を使用してサーバーと通信するクライアントアプリケーションでは、クライアント文字セットを適宜設定する必要があります (たとえば、SET NAMES 'utf8mb4'ステートメントを発行します)。 一部の文字セットは、クライアントの文字セットとして使用できません。 SET NAMES または SET CHARACTER SET でこれらを使用しようとすると、エラーが発生します。 許可されていないクライアント文字セットを参照してください。

以降のセクションでは、MySQL における Unicode 文字セットについてさらに詳しく説明します。