Как преобразовать символы в CCSID 65535

Мое приложение находится в VB.Net, и я использую драйвер IBM Client Access для доступа к данным на нашем сервере IBM iSeries.

Проблема в том, что некоторые символы не переводятся автоматически в CCSID 65535 (например, символ €), и команда обновления/вставки завершается ошибкой.

Я не знаю, на каком уровне нужно решать проблему. На драйвере ODBC? В строке подключения? Или нам нужно создать dll преобразования?

Заранее спасибо за помощь !


person Anne-Christine    schedule 28.01.2011    source источник
comment
По определению, CCSID 65535 — это двоичные данные, которые не следует преобразовывать. Если вам нужно извлечь из него «символьные» значения, необходимо знать, какой CCSID был у данных, когда они были сохранены как CCSID 65535. Например, если это был CCSID ASCII, когда он был введен, вы должны использовать тот же самый ASCII-код. CCSID при попытке прочитать его обратно. И если это был CCSID 37 (американский английский), когда он был введен, он будет правильным только в том случае, если вы прочитаете его как CCSID 37. CCSID 65535, как правило, является плохой идеей для хранения любых символьных данных.   -  person user2338816    schedule 03.04.2014


Ответы (2)


У вас есть BinAsChar=true в строке подключения. Вам также может понадобиться установить CCSID или Host CCSID на тот, который подходит для вас, по умолчанию используется 37, что означает США/Канада. Вот дополнительная информация о параметрах строки подключения для DB2:

http://msdn.microsoft.com/en-us/library/ee251805%28BTS.10%29.aspx

person Chris Haas    schedule 28.01.2011
comment
Да, флажок BinAsChar установлен в Администраторе ODBC. Установка CCSID на 1148 (Бельгия) на сервере действительно решает проблему, но они не хотят заменять CCSID 65535 другим! Таким образом, мне приходится конвертировать символы по-другому... - person Anne-Christine; 28.01.2011
comment
Не можете ли вы изменить CCSID в строке подключения, чтобы автоматически преобразовать его? Я не слишком знаком с этим, поэтому я не знаю, если это вариант или даже нет. - person Chris Haas; 28.01.2011
comment
На самом деле iSeries не поддерживает двухбайтовые символы, и, похоже, ни один поставщик данных не преобразует их в однобайтовые символы. Единственное решение, которое мы нашли до сих пор, — это преобразование символов внутри приложения .Net. - person Anne-Christine; 25.10.2011
comment
На самом деле, серия AS/400 (включая iSeries и более поздние версии) нормально обрабатывает двухбайтовые символы. Файлы могут иметь двухбайтовый код, смешанный с однобайтовым, если это необходимо. Или один столбец в таблице может быть двухбайтным, а следующий столбец может быть однобайтовым. Проблема почти всегда сводится к неправильной установке системного значения QCCSID вместе с неправильными определениями таблиц и столбцов. - person user2338816; 03.04.2014

Настройте DSN с помощью «драйвера iseries Access ODBC» с помощью инструмента Windows «Администрирование ODBC». В настройках конфигурации выберите вкладку преобразования и установите флажок «Преобразовать двоичные данные (CCSID 65535) в текст.

person Enoch Norton    schedule 08.01.2015