Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 26.8Mb
PDF (A4) - 26.9Mb
HTML Download (TGZ) - 7.2Mb
HTML Download (Zip) - 7.2Mb


10.1.10 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 文字をサポートします。utf8mb4utf16utf16le、および utf32 は、BMP および補助文字をサポートします。

類似した一連の照合順序を、ほとんどの Unicode 文字セットで使用できます。たとえば、それぞれにはデンマーク語の照合順序があり、その名前は ucs2_danish_ciutf16_danish_ciutf32_danish_ciutf8_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' ステートメントを発行することによって、クライアント文字セットをそれに従って設定する必要があります。ucs2utf16utf16le、および utf32 は、クライアント文字セットとして使用できません。つまり、これらは SET NAMES または SET CHARACTER SET で機能しません。(セクション10.1.4「接続文字セットおよび照合順序」を参照してください。)

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