Выберите возвращает символ "¿" - PullRequest
0 голосов
/ 08 декабря 2018

Мой запрос:

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 Ответ

0 голосов
/ 08 декабря 2018

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

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

Пример:

chcp 1252
set NLS_LANG=.WE8MSWIN1252
sqlplus ...

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

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

...