SQL0332 Преобразование символов между CCSID-id 1156 и 278 невозможно

Я внедрил sql-запрос к iseries в программу Java, которая выдает следующую ошибку:

"[SQL0332] Character conversion between CCSID-id 1156 and 278 is not possible.".

Я столкнулся с этой проблемой только с одной библиотекой, но не со всеми.

Рабочий запрос:

select * from SRBKTO where KOACNO=721

Нерабочий запрос:

select * from SRBKTO where KOACNO= '721' (This works for other libraries)

Если я попытаюсь выполнить запрос с условным предложением с кавычками (тип String или int), выдается ошибка.

Я не очень хорошо разбираюсь в iSeries. Я понял, что существует проблема преобразования символа " ' " (на данный момент, я думаю, только для этого символа) из CCSID 1156 в 278.

Я попробовал java API com.ibm.as400.access.AS400.setCcsid(1156) из jt400native jar, чтобы установить исходный CCSID для объекта соединения, что ни к чему не привело. Требуется ли изменить целевой CCSID? Может ли кто-нибудь предложить способ решить эту проблему?


person PadmaReddy    schedule 30.09.2015    source источник
comment
Символ апострофа ( ' ) равен x'7D' как в CCSID 278, так и в CCSID 1156. Как таковое преобразование не требуется. Но если KOACNO является любым числовым типом данных, попытка сравнить значение столбца с любой строкой в ​​кавычках не имеет особого смысла. Зачем вообще указывать значение?   -  person user2338816    schedule 10.10.2015


Ответы (2)


Если вы используете DSPFFD для отображения описаний полей KOACNO, вы обнаружите, что кодовая страница/набор символов — 1156 (Baltic). Вы можете использовать CAST для преобразования поля в запросе для вашей целевой кодировки.

Проверьте правильный CCSID из работающей библиотеки. Пример приведения ниже (при условии, что правильно 1146):

select * from SRBKTO where CAST(KOACNO AS CHAR(20) CCSID 1146) = '721'
person Tuomas    schedule 13.10.2015

Проблема заключается в несовместимости между CCSID таблицы базы данных и CCSID задания, под которым выполняется программа Java.

Чтобы изменить CCSID таблицы базы данных, чтобы он соответствовал заданию

CHGPF FILE([LIBRARY]/[FILE]) CCSID(278)

или CHGPF FILE([LIBRARY]/[FILE]) CCSID(*HEX), чтобы не было конвертации.

Это кажется наиболее вероятным, поскольку вы говорите, что другие библиотеки работают нормально.

В качестве альтернативы, чтобы изменить CCSID программы Java (если вы работаете в интерактивном режиме), чтобы соответствовать таблице базы данных

CHGJOB CCSID(1156)

Или CHGJOB CCSID(*HEX) чтобы не было конвертации

person Daniel Webb    schedule 28.09.2017