Выберите возвращает символ "¿"
Мой запрос:
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
соответствует вашему набору символов базы данных, однако выбранный набор символов должен поддерживать ваш символ ’