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 */