Проблема кодировки DB2 в AS400 с jt400

Я использую jt400 для получения данных из базы данных на as400 - db2.

Моя база данных использует кодировку ccsid 37. У меня проблема только с польскими буквами. Как заставить jt400 использовать правильную кодировку?

Я старался

jdbc:as400://MY_SYSTEM/LIBRARY;translate binary=true

AS400Text converer = new AS400Text(stringFromDb.length(), 37);
String stringAfterConversion = converter.toObject(stringFromDb.getBytes());

но это не работает

2 ответа

CCSID 37 является английским и не содержит определенных польских символов. Польский CCSID - 1153 или 870 (без символа евро).

Вы можете увидеть символы, содержащиеся в CCSID 37 (Набор символов 697) здесь: ftp://ftp.software.ibm.com/software/globalization/gcoc/attachments/CS00697.pdf

Вы можете увидеть символы, содержащиеся в CCSID 1153 (набор символов 1375) здесь: ftp://ftp.software.ibm.com/software/globalization/gcoc/attachments/CS01375.pdf

Если поле базы данных содержит CCSID 37, вы не сможете хранить символы, в которых отсутствует CCSID из 1153. Общие символы будут преобразованы. Вы можете попробовать изменить базу данных, чтобы использовать UTF-16 или CCSID 1200. Он содержит все символы в CCSID 37 и CCSID 1153.

Если все настроено правильно, вам не нужно делать какие-либо ручные преобразования. БД и драйвер JDBC справятся с этим за вас.

Вы говорите, что ваша БД использует CCSID 37, который используется на английском языке в США, Канаде, Нидерландах, Португалии, Бразилии, Новой Зеландии, Австралии.

Для обработки польских символов вам, вероятно, понадобится CCSID 870 (для идентификаторов языка и связанных с ними CCSID по умолчанию)

Однако CCSID назначается для каждого столбца. Таким образом, все в этом столбце этой таблицы должно быть в одном или другом CCSID.

Если вам нужно хранить английский и польский языки в одном и том же столбце одной и той же таблицы, то лучшим вариантом будет изменить столбец (столбцы) на Юникод.

Кроме того, вы можете пометить данные как "двоичный" CCSID 65535, чтобы система не пыталась преобразовать их. Вам нужно translate binary=false Ваше заявление будет нести ответственность за знание того, какие записи были на английском языке, а какие - на польском. Таким образом, вам нужно дополнительное поле флага в записи.

Другие вопросы по тегам