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

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

10.9.8 3 バイト Unicode 文字セットと 4 バイト Unicode 文字セット間の変換

このセクションでは、utf8mb3utf8mb4 の文字セット間で文字データを変換する際に発生する可能性のある問題について説明します。

注記

この説明では、主に utf8mb3utf8mb4 の間の変換に焦点を当てていますが、ucs2 文字セットと utf16utf32 などの文字セットの間の変換にも同様の原則が適用されます。

utf8mb3utf8mb4 の文字セットは、次の点で異なります:

注記

この説明では、3 バイトおよび 4 バイトの UTF-8 文字セットデータの参照に関する明示的な utf8mb3 および utf8mb4 文字セット名について説明します。 ただし、テーブル定義では、utf8 が使用されるのは、このような定義で指定された utf8mb3 のインスタンスが、utf8mb3 のエイリアスである utf8 に MySQL によって変換されるためです。

utf8mb3 から utf8mb4 に変換する利点の 1 つは、アプリケーションで補助文字を使用できることです。 1 つのトレードオフは、これによってデータストレージ領域要件が増加する可能性があることです。

テーブルの内容に関しては、utf8mb3 から utf8mb4 への変換で問題は発生しません:

テーブル構造に関して、主な潜在的な非互換性は次のとおりです:

したがって、テーブルを utf8mb3 から utf8mb4 に変換するには、一部のカラムまたはインデックスの定義の変更が必要になる場合があります。

テーブルは、ALTER TABLE を使用して utf8mb3 から utf8mb4 に変換できます。 テーブルに次の定義があるとします:

CREATE TABLE t1 (
  col1 CHAR(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  col2 CHAR(10) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL
) CHARACTER SET utf8;

次のステートメントは、utf8mb4 を使用するように t1 を変換します。

ALTER TABLE t1
  DEFAULT CHARACTER SET utf8mb4,
  MODIFY col1 CHAR(10)
    CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  MODIFY col2 CHAR(10)
    CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;

utf8mb3 から utf8mb4 への変換時のキャッチは、bytes に関してカラムまたはインデックスキーの最大長が変更されないことです。 そのため、文字の最大長が 3 ではなく 4 なので、文字の点ではこれはより小さくなります。 CHARVARCHAR および TEXT データ型の場合は、MySQL テーブルを変換する際に次の問題を確認してください:

前述の条件が適用される場合は、定義されているカラムまたはインデックスの長さを減らすか、utf8mb4 ではなく utf8mb3 を引き続き使用する必要があります。

次に、構造的な変更が必要な例をいくつか示します。

前述の変更のタイプは、非常に長いカラムまたはインデックスを持つ場合にのみ必要になる可能性が高くなります。 それ以外の場合は、前述の ALTER TABLE を使用して、問題なくテーブルを utf8mb3 から utf8mb4 に変換できます。

次の項目は、その他の潜在的な非互換性をまとめたものです:

utf8mb4, utf16, utf16le または utf32 に変換し、utf8mb3 または ucs2 に変換しなおすことにした場合 (古いバージョンの MySQL にダウングレードする場合など)、次の考慮事項が適用されます: