2014-11-26 1 views
0

У меня есть таблица DB2, которая определена как таблица Unicode Она содержит поле, определенное как Char (35). Теперь у меня есть параметр, который имеет длину 35, но содержит немецкий умляут, поэтому ему нужно больше 35 байт. Я получаю SQLCODE -302, если пытаюсь выполнить оператор Insert или Update. Если я удалю один символ из переменной параметра, он будет работать, и чтение таблицы также вернет немецкий умляут правильно. Я попробовал его с помощью SQuirreL с драйвером DB2 3.64.82, но не с параметром, а с константой строки, и он возвратил SQLCode -404, который является куском -302 для строковых констант. Вот SQL заявление я попытался выполнить в SQirreL SQL Client 3.4.0:DB2 V10 для Z/OS Таблица Unicode и JDBC получает -302 для параметра, который содержит символы Unicode

INSERT INTO LEA0001.VP_105 (Anlage_Zeitpunkt, Anlage_User, Aender_Zeitpunkt, 
Aender_User, V_Nr, lief_id_ref_nr, gueltig_bis_zp, gueltig_ab_zp, 
erstprod_termin,druckfreig_termin, ANF_SDB, IST_ERSTPROD_KW, pr_name, pr_strasse, 
pr_plz, pr_ort, pr_land) values (current timestamp, 'HUGO', current timestamp, '', 
48854, 2769, '9999-12-31 23:59:59.999999', '2014-11-25 15:40:36.395542', 
'0001-01-01', '0001-01-01', 'N', 'N', 'Getränkeggggggggggggggggggggggggggg', '', '', '', '') 

Что я хотел бы знать, если это ошибка в драйвере DB2 или, если есть параметр или ее для драйвера, который заставит его работать. Мне кажется, что сейчас драйвер сравнивает количество байтов с указанной длиной поля и затем бросает эту ошибку, потому что 36> 35. Но должно быть очевидно, что для таблицы Unicode это не может быть прав.

Информация о версии: В беличьих я использовать драйвер IBM DB2 Net и db2jcc версию драйвера 3.64.82 БД является Z/OS DB2 V10 Rel 1015

ответ

1

CHAR(35) означает 35 байт, а не символов. Это не имеет ничего общего с драйвером, но с тем, как таблицы определены в DB2. При создании таблицы вам нужно учитывать возможную длину байта столбцов персонажа.

+0

О, это объясняет это. Спасибо за Ваш ответ! Итак, мы поправились, переопределив таблицу, поэтому поле теперь Char (70) – Starryk