Кодировка символов Oracle

#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.