#oracle #character-encoding #special-characters #oracle11g
#Oracle #кодировка символов #специальные символы #oracle11g
Вопрос:
У меня есть MVIEW на сервере разработки как
CREATE MATERIALIZED VIEW MY_MVIEW
AS
SELECT col1 AS "N° INVOICE" from TABLE
MVIEW был установлен на сервере PROD, и когда я проверяю его запрос, у меня появляется символ, который °
не распознан
SELECT query from user_mviews where mview_name = 'MY_MVIEW' ;
QUERY
---------------------------------------
SELECT col1 AS "N? INVOICE" from TABLE
мы используем Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
для обеих сред .
Есть идеи, почему это произошло и как это исправить? или мне нужно переименовать свой псевдоним?
Ответ №1:
Всякий раз, когда вы видите знак вопроса вместо специального символа, это означает, что набор символов клиента не поддерживает этот символ и преобразование было недоступно.
Преобразование выполняется с использованием набора символов базы данных в качестве источника и набора символов клиента в качестве целевого. Переменная среды NLS_LANG позволяет управлять набором символов клиента. NLS_LANG должен быть установлен до открытия соединения, и его нельзя изменить во время сеанса.
Для получения дополнительной информации о NLS_LANG обратитесь к Руководству Oracle® по поддержке глобализации баз данных
Кстати, NLS_LANGUAGE не имеет ничего общего с набором символов! Она управляет только языком, используемым в сообщениях сервера, и настройками локали.
Ответ №2:
Я бы определенно рекомендовал переименовать ваш псевдоним во что-то простое, например NO_INVOICE, которое не содержит никаких необычных символов и не требует встраивания в двойные кавычки для ссылки. нецелесообразно обрабатывать имена столбцов так, как если бы они были форматированными заголовками для отчетов — сделайте это в отчете. При использовании нестандартных символов, подобных этому, у вас возникнут проблемы с различными настройками среды, такими как NLS_LANG.
Комментарии:
1. Спасибо, Тони, это то, что я тоже предлагаю, но я также хотел бы знать причину, по которой это произошло
2. -1 за упоминание NLS_LANGUAGE в связи с проблемами с набором символов. За это отвечает NLS_LANG.