MySQL 8.0 リファレンスマニュアル


MySQL 8.0 リファレンスマニュアル  /  ...  /  utf32 文字セット (UTF-32 Unicode エンコーディング)

10.9.7 utf32 文字セット (UTF-32 Unicode エンコーディング)

utf32 文字セットは固定長です (ucs2 と同様で、utf16 とは異なります)。utf32 はすべての文字に 32 ビットを使用し、ucs2 (すべての文字に 16 ビットを使用します) とも、utf16 (一部の文字に 16 ビットを、ほかの文字に 32 ビットを使用します) とも異なります。

utf32 は、ucs2 の 2 倍のスペース、utf16 よりも多くのスペースを必要としますが、utf32 には、ストレージについて予測可能であるという ucs2 と同じ利点があります。utf32 に必要なバイト数は文字数の 4 倍になります。 また、utf16 とは異なり、utf32 でのエンコーディングにはトリックはないので、格納された値はコード値と等しくなります。

後者の利点がどのように役立つかを説明するために、utf32 コード値のときに utf8mb4 値を求める方法を示した例を挙げます。

/* Assume code value = 100cc LINEAR B WHEELED CHARIOT */
CREATE TABLE tmp (utf32_col CHAR(1) CHARACTER SET utf32,
                  utf8mb4_col CHAR(1) CHARACTER SET utf8mb4);
INSERT INTO tmp VALUES (0x000100cc,NULL);
UPDATE tmp SET utf8mb4_col = utf32_col;
SELECT HEX(utf32_col),HEX(utf8mb4_col) FROM tmp;

MySQL では、未割り当ての Unicode 文字または個人使用領域の文字の追加について広く許容しています。 実際、utf32 の妥当性チェックは 1 つしかありません。0x10ffff よりも大きなコード値はありません。 たとえば次の場合は不正です。

INSERT INTO t (utf32_column) VALUES (0x110000); /* illegal */

関連キーワード:  文字, セット, 照合, utf, 順序, サポート, col, バイト, 追加, tmp