1

Я пытаюсь смоделировать запрос для столбца, который будет 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 ответа2

0

Нет способа объявить столбцы типа 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:

-1

Для 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

https://www.ibm.com/support/knowledgecenter/SSEPGG_11.1.0/com.ibm.db2.luw.sql.ref.doc/doc/r0008470.html

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .