2015-04-14 3 views
0

У меня есть база данных DB2, и я уже определил таблицы с varchar(x), но кажется, что x - это не количество символов, а количество байтов. Можно ли как-то решить проблему как-то динамично? или мне следует обновлять таблицы?Конфигурация хранилища DB2 UTF8

+0

Я не думаю, что это «проблема» - это хорошо документированное поведение. Ответ зависит от версии и платформы DB2, о которых вы не указали. – mustaccio

+0

db2 v10.5 и я запускаю его на Win. Я читал, что могу использовать VARGRAPHIC –

ответ

0

Символы UTF-8 могут быть представлены байтовыми последовательностями длиной от 1 до 4 байтов, поэтому невозможно заранее знать максимальную длину байта строки UTF-8, которая содержит x символы Юникода.

Начиная с DB2 10.5 fix pack 4 (так называемый «выпуск Cancun») вы можете specify string length units при определении столбцов: VARCHAR(x OCTETS) будет означать x байты; VARCHAR(x CODEUNITS16) будет означать x двухбайтовых символов, а VARCHAR(x CODEUNITS32) будет означать x четырехбайтовых символов.

Если вы не укажете единицы явно, значение по умолчанию выводится из параметра конфигурации базы данных string_units и из глобальной переменной NLS_STRING_UNITS.

GRAPHIC и VARGRAPHIC типы данных также подчиняются одной и той же спецификации единицы, хотя для них по умолчанию используется 2-байтовый символ, а не октеты.

Следует отметить, что характер и CLOB колонки по-прежнему распространяются те же ограничения длины, как и раньше, например, максимальная длина VARCHAR колонны составляет 32672 байт (OCTETS), или 16336, или .

+0

, поэтому в основном мне нужно установить CODEUNITS32 в строковых единицах, правильно? –

+0

Я не могу сказать вам, что вам нужно делать, потому что я не знаю ваших требований. Я надеюсь, что предоставленная вами информация поможет вам принять решение. – mustaccio

+0

Я установил fx4 и установил string_utils в codeunit32, поэтому он работает сейчас, спасибо! –

Смежные вопросы