- 10.1.10.1 ucs2 文字セット (UCS-2 Unicode エンコーディング)
- 10.1.10.2 utf16 文字セット (UTF-16 Unicode エンコーディング)
- 10.1.10.3 utf16le 文字セット (UTF-16LE Unicode エンコーディング)
- 10.1.10.4 utf32 文字セット (UTF-32 Unicode エンコーディング)
- 10.1.10.5 utf8 文字セット (3 バイト UTF-8 Unicode エンコーディング)
- 10.1.10.6 utf8mb3 文字セット (utf8 のエイリアス)
- 10.1.10.7 utf8mb4 文字セット (4 バイトの UTF-8 Unicode エンコーディング)
Unicode サポートの (MySQL 4.1 での) 初期実装には、Unicode データを格納するための次の 2 つの文字セットが含まれていました。
ucs2
。文字ごとに 16 ビットを使用する Unicode 文字セットの UCS-2 エンコーディング。utf8
。文字ごとに 1 から 3 バイトを使用する Unicode 文字セットの UTF-8 エンコーディング。
これらの 2 つの文字セットは、Unicode バージョン 3.0 の Basic Multilingual Plane (BMP) の文字をサポートします。BMP 文字には次の 3 つの特性があります。
これらのコード値は 0 から 65535 (または
U+0000
..U+FFFF
) です。これらは、
ucs2
と同様に、16 ビット固定の単語でエンコードできます。これらは、
utf8
と同様に、8、16、または 24 ビットでエンコードできます。主要言語のほとんどすべての文字には、これらで十分です。
前述の文字セットではサポートされていない文字には、BMP の範囲外にある補助文字が含まれます。BMP の範囲外の文字は、REPLACEMENT CHARACTER と見なされ、Unicode 文字セットへの変換時に、'?'
に変換されます。
MySQL 5.6 での Unicode のサポートには補助文字が含まれるので、範囲がより広いため、より多くのスペースを占める新しい文字セットが必要になります。次の表では、以前の Unicode サポートと現在の Unicode サポートの機能を簡単に比較しています。
MySQL 5.5 より前 | MySQL 5.5 以降 |
---|---|
すべての Unicode 3.0 文字 | すべての Unicode 5.0 および 6.0 文字 |
補助文字なし | 補助文字あり |
ucs2 文字セット、BMP のみ |
変更なし |
3 バイトまでの utf8 文字セット、BMP のみ |
変更なし |
4 バイトまでの新しい utf8mb4 文字セット、BMP または補助 |
|
新しい utf16 文字セット、BMP または補助 |
|
新しい utf16le 文字セット、BMP または補助 (5.6.1 以降) |
|
新しい utf32 文字セット、BMP または補助 |
これらの変更には上位互換性があります。新しい文字セットを使用する場合、アプリケーションの非互換性の問題が生じる可能性があります。セクション10.1.11「以前の Unicode サポートから現在の Unicode サポートへのアップグレード」を参照してください。さらにこのセクションでは、utf8
から (4 バイトの) utf8mb4
文字セットに変換する方法と、そのときに適用される可能性がある制約について説明します。
MySQL 5.6 は、次の Unicode 文字セットをサポートします。
ucs2
。文字ごとに 16 ビットを使用する Unicode 文字セットの UCS-2 エンコーディング。utf16
。Unicode 文字セットの UTF-16 エンコーディング。ucs2
に似ていますが、補助文字用の拡張機能があります。utf16le
。Unicode 文字セットの UTF-16LE エンコーディング。utf16
と似ていますが、ビッグエンディアンではなくリトルエンディアンです。utf32
。文字ごとに 32 ビットを使用した Unicode 文字セットの UTF-32 エンコーディング。utf8
。文字ごとに 1 から 3 バイトを使用する Unicode 文字セットの UTF-8 エンコーディング。utf8mb4
。文字ごとに 1 から 4 バイトを使用した Unicode 文字セットの UTF-8 エンコーディング。
ucs2
および utf8
は BMP 文字をサポートします。utf8mb4
、utf16
、utf16le
、および utf32
は、BMP および補助文字をサポートします。
類似した一連の照合順序を、ほとんどの Unicode 文字セットで使用できます。たとえば、それぞれにはデンマーク語の照合順序があり、その名前は ucs2_danish_ci
、utf16_danish_ci
、utf32_danish_ci
、utf8_danish_ci
、および utf8mb4_danish_ci
です。例外は utf16le
であり、2 つの照合順序しかありません。セクション10.1.14.1「Unicode 文字セット」にはすべての Unicode 照合順序が一覧表示されており、補助文字の照合順序プロパティーについても説明しています。
多くの補助文字は東アジアの言語のものですが、MySQL 5.6 で追加するサポートは、Unicode 文字セットでのより多くの日本語と中国語の文字に対するサポートであり、新しい日本語および中国語の文字セットのサポートではありません。
UCS-2、UTF-16、および UTF-32 の MySQL での実装は、ビッグエンディアンのバイト順で文字を格納し、値の先頭にバイト順マーク (BOM) を使用しません。ほかのデータベースシステムでは、リトルエンディアンのバイト順または BOM を使用していることもあります。このような場合、これらのシステムと MySQL の間でデータを転送するときに、値の変換を実行する必要があります。UTF-16LE の実装はリトルエンディアンです。
MySQL は UTF-8 値に BOM を使用しません。
Unicode を使用したサーバーと通信する必要があるクライアントアプリケーションは、たとえば SET NAMES 'utf8'
ステートメントを発行することによって、クライアント文字セットをそれに従って設定する必要があります。ucs2
、utf16
、utf16le
、および utf32
は、クライアント文字セットとして使用できません。つまり、これらは SET NAMES
または SET CHARACTER SET
で機能しません。(セクション10.1.4「接続文字セットおよび照合順序」を参照してください。)
以降のセクションでは、MySQL における Unicode 文字セットについてさらに詳しく説明します。