Выберите возвращает символ "¿"

Мой запрос:

SELECT op_arv
FROM my_table@OTHER_DB

возвращает:

d¿identification

Символ "¿" не должен быть там.

Если я тогда бегу:

SELECT 
 substr(op_arv,2,1) AS t_substr
,ascii(substr(op_arv,2,1)) AS t_ascii
,chr(ascii(substr(op_arv,2,1))) AS t_chr_ascii
,asciistr(substr(op_arv,2,1)) AS asciistr_1
FROM my_table@OTHER_DB

Я получаю следующий вывод:

¿
146
¿
\0092

Функция ASCII возвращает 146, что соответствует символу (апостроф), который имеет смысл. Но если я попытаюсь "CHR()" фактическое значение, я получу ¿ вместо '. CHR(146) дает мне правильный символ...

Запуск функции ASCIISTR вернет значение Unicode \0092, которое является управляющим символом Unicode, а не апострофом...

Я использую Oracle 11gR2 с NLS_CHARACTERSET= WE8MSWIN1252. Я подключаюсь (через ссылку на базу данных) к базе данных Oracle, работающей с NLS_CHARACTERSET= WE8ISO8859P1.

Есть идеи?

Спасибо!

1 ответ

Решение

Скорее всего, вы не установили свой NLS_LANG значение и Oracle по умолчанию его AMERICAN_AMERICA.US7ASCII,

SQLplus наследует набор символов из командной строки, вы можете запросить / изменить кодовую страницу с помощью команды chcp и тогда вы должны установить NLS_LANG соответственно.

Пример:

chcp 1252
set NLS_LANG=.WE8MSWIN1252
sqlplus ...

Если вы работаете в Linux, используйте locale charmap или же echo $LANG чтобы получить кодировку вашего терминала.

Не требуется устанавливать NLS_LANG соответствует вашему набору символов базы данных, однако выбранный набор символов должен поддерживать ваш символ

Другие вопросы по тегам