Проблемы с набором символов в Oracle Gateways, SQL Server и Application Express - PullRequest
2 голосов
/ 26 марта 2010

Я выполняю миграцию данных из Oracle в VMS, которая обращается к данным на SQL Server с использованием гетерогенных служб (через ODBC), в Oracle на AIX, получая доступ к SQL Server через шлюзы Oracle (dg4msql). База данных Oracle VMS использовала набор символов WE8ISO8859P1. База данных AIX использует WE8MSWIN1252. База данных SQL Server использует «Latin1-General, регистр-нечувствительный, регистр-нечувствительный, канатип-нечувствительный, нечувствительный к ширине для данных Unicode, порядок сортировки SQL Server 52 на кодовой странице для данных, отличных от Unicode» согласно sp_helpsort. В базах данных SQL Server используются nchar / nvarchar или все строковые столбцы.

В Application Express в некоторых случаях появляются дополнительные символы, например, 123 отображается как% 001% 002% 003. В sqlplus все выглядит хорошо, но если я использую функции Oracle, такие как initcap, я вижу то, что появляется в виде пробелов между каждой буквой строки, когда я запрашиваю базу данных сервера sql (используя ссылку на базу данных). Это не происходило при старой конфигурации.

Я предполагаю, что проблема в том, что в nchar есть дополнительные байты, а набор символов в Oracle не может его преобразовать. Похоже, что решение ODBC не поддерживало nchars, поэтому, должно быть, просто вернуло их обратно в char, и они появились нормально. Мне нужно только просмотреть данные сервера SQL, поэтому я открыт для любого решения, такого как приведение, но я не нашел ничего работающего.

Есть идеи, как с этим бороться? Должен ли я использовать другой набор символов в Oracle и, если да, применимо ли это ко всем схемам, поскольку мне важна только одна из них.

Обновление : Я думаю, что могу упростить этот вопрос. Таблица SQL Server использует nchar. выберите дамп (столбец) из таблицы возвращает Typ = 1 Len = 6: 0,67,0,79,0,88, когда значение равно 'COX', выбираю ли я из удаленной ссылки на сервер sql, приведу литерал 'COX' к nvarchar или скопируйте в таблицу Oracle как nvarchar. Но когда я выбираю сам столбец, он появляется с дополнительными пробелами только при выборе ссылки удаленного сервера SQL. Я не могу понять, почему dump будет возвращать то же самое, но если не использовать dump, то будут показаны разные значения. Любая помощь приветствуется.

Ответы [ 2 ]

4 голосов
/ 02 июня 2010

В этой конкретной версии SQL Server существует несовместимость между шлюзами Oracle и nchar. Решением было создание представлений на стороне SQL Server, приводящих nchars к varchars. Затем я мог выбирать из представлений через шлюзы, и он правильно обрабатывал наборы символов.

0 голосов
/ 26 марта 2010

Вас может заинтересовать FAQ по Oracle NLS Lang

...