Как определить столбцы VARCHAR для поддержки специальных символов?

В моей таблице product у меня есть столбец: product_name с типом VARCHAR и размером 100: product_name varchar(100)

Когда я пытаюсь вставить имя со специальными символами, такими как этот:

°%âä°%âä°%âä°%âä°%âä°%âä°%âä°%âä°%âä°%âä°%âä°%âä°%°°%âä°%âä°%âä°%âä°%âä°%âä°%âä°%âä°%âä°%âä°%âä°%âä°

Я получаю эту ошибку:

ERROR : org.hibernate.util.JDBCExceptionReporter:78 : logExceptions() : Error for batch element #1: DB2 SQL Error: SQLCODE=-302, SQLSTATE=22001, SQLERRMC=null, DRIVER=3.57.82

В моем столбце product_name может быть 100 символов, для меня «â» — это 1 символ.

Есть ли в DB2 другой тип (кроме varchar), чтобы установить его для столбца product_name?

таким образом, я могу выполнить этот запрос:

alter table product alter column product_name set data type otherType(100);

person senior    schedule 14.09.2016    source источник
comment
Какая ОС и какая версия DB2? Символы и байты - это две разные меры. Решение зависит от ответов на мой вопрос или просто увеличьте 100.   -  person MichaelTiefenbacher    schedule 14.09.2016
comment
Возможный дубликат хранилища данных Unicode DB2 VARCHAR   -  person Peter Schuetze    schedule 14.09.2016
comment
@MichaelTiefenbacher, я использую DB2 10.5.5   -  person senior    schedule 14.09.2016


Ответы (1)


Проверьте

STRING_UNITS

параметр конфигурации базы данных. Вы можете использовать его для переключения с длины байтов по умолчанию на длину символов. Это среднее значение char(100) будет по умолчанию интерпретироваться DB2 как 100 байт. Поскольку символ в базе данных Unicode может занимать 1-4 байта, 100 байтов недостаточно для хранения 100 символов. После переключения на STRING_UNITS = CODEUNITS32 вы получаете 100 символов при определении столбца varchar(100). Таким образом, вам не нужен другой тип, а другой параметр db cfg.

person MichaelTiefenbacher    schedule 14.09.2016
comment
@junior - обратите внимание, что это по сути эквивалентно объявлению product_name как varchar(400 octets), и это повлияет на все столбцы таблицы и переменные SQL PL в базе данных. Это не проблема со столбцами VARCHAR, потому что они не будут выделять больше места, чем необходимо, но столбцы CHAR будут выделять в четыре раза больше места. - person mustaccio; 14.09.2016