Выполнение SQL-запроса к таблицам, имеющим имя с символом @ или #, указывает на проблему с другим CCSID - PullRequest
2 голосов
/ 15 мая 2019

У меня есть устаревшая база данных на Db2 i (Db2400), в которой имена таблиц (физических файлов) и их поля содержат несколько вариантов символов, таких как @ и #.Мое приложение использует простой JDBC для доступа к данным в этих таблицах.

Это прекрасно работает, когда на моей машине IBM i установлен CCSID по умолчанию, т.е. на 65535, и на английском CCSID.

Но запросы SQL на CCSID не выполняются, например, 871 (Исландия), который обрабатывает символ @ по-разному.Это выдает ошибку:

[SQL0113] Name T@BNAME not allowed.

Я пробовал несколько подходов для решения проблемы, например, установил свойство URL-адреса соединения JDBC:

"package ccsid" в 1208 (UTF-8).

"package ccsid" - указывает кодировку символов, используемую для пакета SQL и любых операторов, отправляемых в систему.

Другой подход заключался в создании псевдонимов для таких таблиц.Но если эти символы присутствуют в имени столбца, то мы не можем создать псевдоним для тех, кто не воссоздает структуру таблицы.

Я ожидаю, что мои запросы JDBC будут правильно выполняться в разных CCSID.Рекомендуется не использовать такие символы в имени объекта SQL.Но, как я уже сказал, моя база данных является устаревшей базой данных и не может быть легко изменена / изменена.

Ответы [ 2 ]

3 голосов
/ 17 мая 2019

Создание представлений вместо псевдонимов для таблиц с проблемными символами в именах столбцов.Вы можете назначить новые имена для столбцов в определении представления.

1 голос
/ 15 мая 2019

Вы можете попробовать использовать символ в CCSID 871, который соответствует позиции @ в CCSID 37.

В CCSID 37 символ @ равен x'7c'. В CCSID 871 x'7c' есть Ð. Поэтому попробуйте имя столбца TÐBNAME.

Вот несколько ссылок на две таблицы EBCDIC:

Обратите внимание, что два символа меняют позиции в таблицах.

...