Как установить CODEUNIT32 (CHAR SET = "UTF-32" в DDL?
Я пытаюсь смоделировать запрос для столбца, который будет VARCHAR(120), но на самом деле будет хранить 480 байтов.
Длина 480 устанавливается как VARCHAR (120) = 120 x 4 = 480 байтов. Это связано с модулем кода спецификации строки 32. Это означает, что для каждого 1 символа он будет занимать 4 байта.
Я не уверен в синтаксисе для DDL. Мое исследование показывает, что при создании таблицы должен быть оператор, который устанавливает набор символов в UTF-32, но я не уверен. Это для среднего уровня DB2 (не мейнфрейма)
Вот что-то, что я нашел, но я не уверен, что оно действительно, ни как COLLATE
работает.
ALTER TABLE table_name
MODIFY column_name VARCHAR(255)
CHARACTER SET utf8
COLLATE utf8_unicode_ci;
Любая помощь будет оценена!
2 ответа
Нет способа объявить столбцы типа UTF-32.
Вам нужно будет определить столбец как VARCHAR(480)
затем используйте CODEUNITS32
всякий раз, когда вы получаете доступ к столбцу, чтобы привести его к UTF-32.
Примеры:
SELECT CHARACTER_LENGTH(NAME,CODEUNITS32) FROM T1 WHERE NAME = 'Jürgen';
SET :POSITION = LOCATE_IN_STRING('Jürgen lives on Hegelstraße','ß',-1,CODEUNITS32);
Некоторые ссылки IBM:
Для DB2 LUW просто объявите столбец как VARCHAR(120 CODEUNITS32)
, Db2 будет хранить данные как UTF-8, разрешать до 120 символов, но разрешать до 480 байтов.
create table T(C VARCHAR(e CODEUNITS32))
insert into t values '€£'
select c, hex(c), lengthb(c),length(c) from t
C 2 3 4
---- ------------------ - -
€£ E282ACC2A3F09F9883 9 3