У меня есть источник данных ODBC для базы данных Oracle. В таблице, из которой я выбираю данные, есть столбцы varchar2
содержащие, например, " кг/м³ " или " ° C ".
Теперь, используя ODBCConnection в моем приложении на С#, OdbcDataReader
возвращает " kg/m" и " ? C ".
Проверка параметров NLS с помощью:
SELECT *
FROM V$NLS_PARAMETERS
WHERE PARAMETER IN ('NLS_CHARACTERSET', 'NLS_NCHAR_CHARACTERSET');
возвращает AL32UTF8
для NLS_CHARACTERSET
и AL16UTF16
для NLS_NCHAR_CHARACTERSET
.
Если я изменяю тип столбца на NVARCHAR
, OdbcDataReader
возвращает правильное значение. Но изменение столбцов таблицы не вариант, потому что база данных также используется другими приложениями.
Есть ли способ получить правильное значение, установив какой-либо параметр для объектов подключения, команды или считывателя?
Спасибо, Cew3
Редактировать: Установка системной среды NLS_LANG
в GERMAN_GERMANY.AL32UTF8
(и перезагрузка машины!) Решила проблему!
Спасибо всем за подсказки/комментарии!
Решение было:
Установка системной среды
NLS_LANG
вGERMAN_GERMANY.AL32UTF8
и перезагрузка машины!
Скорее всего, вы используете устаревший и устаревший Microsoft ODBC for Oracle
от Microsoft. Он не поддерживает UTF-8.
Драйвер ODBC для Oracle не поддерживает ни один из новых типов данных Oracle8 - типы данных Unicode, BLOB, CLOB и т.д., А также не поддерживает новую реляционную объектную модель Oracle.
Используйте драйвер ODBC от Oracle (например, ODAC Runtime Downloads), этот должен работать.
Я использую драйвер Oracle ODBC для Windows (12.2.0.1).
Я попытался установить локальную среду Windows NLS_LANG в AL32UTF8, но безуспешно.
Редактировать: Установка NLS_LANG в GERMAN_GERMANY.AL32UTF8 (и перезагрузка машины!) Решила проблему! Спасибо всем за подсказки!