Как перевести CCSID 65535 в SQuirrel из DB2 на iseries - PullRequest
1 голос
/ 24 ноября 2011

Я новичок в SQuirrel SQL. Мне нужна помощь в переводе CCSID 65535 на ASCII, UNICODE (или что-нибудь удобочитаемое для человека)

Я использую драйвер JDBC согласно следующему руководству .


По данным на сайте IBM :

С какими проблемами преобразования символов должна работать моя программа? IBM i База данных использует EBCDIC для хранения текста. Java использует Unicode. Драйвер JDBC обрабатывает все преобразования между наборами символов, поэтому ваша программа должна не нужно беспокоиться об этом.

но я думаю, что они относятся к CCSID 37, а не к 65535 (Hex).


Я получил следующую информацию из моей базы данных DB2

Выполнение DSPFD дает мне:

Идентификатор набора символов. , , , , , : CCSID 65535

Выполнение DSPFFD дает мне:

TXT     CHAR            3       3        41        Both     Text      
Field text  . . . . . . . . . . . . . . . :  Text   Coded Character
Set Identifier  . . . . . :  65535

Но результат запроса SQuirrel для поля TXT:

5c c1 c4 c4 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 c1 40 7e 40 c2 40 4e 40 c3 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40

Что следует перевести на что-то вроде:

*ADD                      A = B + C

Ответы [ 3 ]

12 голосов
/ 24 ноября 2011

Из часто задаваемых вопросов JDBC:

Почему JDBC Toolbox возвращает символы EBCDIC в мою программу Java?

Обычно драйвер JDBC Toolbox преобразует символы EBCDIC вUnicode Strings автоматически.Если вместо этого он возвращает непереведенные символы EBCDIC, вероятно, поле в базе данных IBM i помечено CCSID 65535. Драйвер JDBC Toolbox распознает этот CCSID как поле, которое не следует переводить.Чтобы избежать такого поведения, пометьте поля в IBM i, которые вы хотите перевести, с действительным CCSID.В качестве альтернативы вы можете установить для свойства соединения «translate binary» значение «true», которое указывает драйверу JDBC преобразовывать все поля, включая поля, помеченные CCSID 65535. Самый простой способ сделать это - добавить

";translate binary=true"

до конца URL-адреса, используемого при подключении к базе данных.

3 голосов
/ 15 апреля 2014

В моем случае этого было недостаточно, файл содержал польские символы и имел ccsid 65535. После изменения строки на «; translate binary = true; ccsid = 870;» это сработало.

И все же одно предупреждение: при использовании в соединении ccsid теряется.

1 голос
/ 27 ноября 2018

Я использую Squirrel для подключения к IBMi под управлением 7.3.У меня возникла та же проблема, и я смог ее решить, выполнив следующие действия:

Щелкните правой кнопкой мыши по псевдониму и выберите «Изменить» в контекстном меню (возможно, потребуется создать копию, а затем изменить ее).Нажмите кнопку «Свойства» в диалоговом окне «Изменить псевдоним xxxxx».Выберите вкладку Свойства драйвера.Выберите Свойства драйвера пользователя. Прокрутите список свойств до тех пор, пока не найдете переводчик бинарный.Установите флажок в этой строке в столбце «Указать».Нажмите на ячейку Value в этой строке и выберите true. Нажмите Ok. Введите ваши учетные данные.Нажмите Ok

...