12.9.7 Набор символов utf32 (кодировка Unicode UTF-32)
Набор символов utf32 имеет фиксированную длину (как ucs2 и в отличие от utf16). utf32 использует 32 бита для каждого символа, в отличие от ucs2 (которое использует 16 бит для каждого символа) и от utf16 (которое использует 16 бит для некоторых символов и 32 бита для других).
utf32 занимает в два раза больше места, чем ucs2, и больше места, чем utf16, но у utf32 есть то же преимущество, что и у ucs2, – предсказуемость для хранения: необходимое количество байтов для utf32 равно количеству символов умноженному на 4. Кроме того, в отличие от utf16, в utf32 нет никаких ухищрений для кодирования, поэтому сохранённое значение равно значению кода.
Чтобы продемонстрировать, как это преимущество полезно, вот пример, показывающий, как определить значение utf8mb4, зная значение кода utf32:
/* 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 существует только одна проверка валидности: значение кода не может быть больше чем 0x10ffff. Например, это некорректно:
INSERT INTO t (utf32_column) VALUES (0x110000); /* illegal */
© 2025 Oracle
Licensed under the GPLv2 License.