2014-10-17 1 views
1

Я должен начать с того, что я не эксперт пользователя Oracle, поэтому у меня есть некоторые проблемы, которые не учитывают основы: D. Наше приложение представляет собой MVC с подключением Nhibernate db. Проблема заключается в том, что мы пытаемся сохранить символы типа «Ѽó» в поле NVARCHAR2, они сохраняются как знак вопроса «?». Чтобы исправить это, мы изменили на другую кодировку в базе данных.NLS_NCHAR_CHARACTERSET описание

Вот наши nls_database_parameters при установке:

NLS_LANGUAGE     AMERICAN         
NLS_TERRITORY     AMERICA         
NLS_CURRENCY     $           
NLS_ISO_CURRENCY    AMERICA         
NLS_NUMERIC_CHARACTERS   .,          
NLS_CHARACTERSET    EE8ISO8859P2        
NLS_CALENDAR     GREGORIAN         
NLS_DATE_FORMAT    DD-MON-RR         
NLS_DATE_LANGUAGE    AMERICAN         
NLS_SORT      BINARY         
NLS_TIME_FORMAT    HH.MI.SSXFF AM       
NLS_TIMESTAMP_FORMAT   DD-MON-RR HH.MI.SSXFF AM     
NLS_TIME_TZ_FORMAT    HH.MI.SSXFF AM TZR      
NLS_TIMESTAMP_TZ_FORMAT  DD-MON-RR HH.MI.SSXFF AM TZR    
NLS_DUAL_CURRENCY    $           
NLS_COMP      BINARY         
NLS_LENGTH_SEMANTICS   BYTE          
NLS_NCHAR_CONV_EXCP   FALSE          
NLS_NCHAR_CHARACTERSET   AL16UTF16 
NLS_RDBMS_VERSION    10.2.0.4.0    

NLS_CHARSET был изначально EE8ISO8859P2 и мы изменили его: AL32UTF8 (работает отлично). Вопрос в том, что NLS_NCHAR_CHARACTERSET не поддерживает эти специальные символы для полей, таких как nvarchar2? Если нет, тогда кто-то может объяснить мне его преследование?

Edit: NLS_LANG устанавливается на: POLISH_POLAND.AL32UTF8

ответ

3

Национальный Charaterset использовался в прежние времена, то есть до того Unicode был доступен. Основная идея заключалась в том, чтобы иметь общий Charaterset, в котором вы храните независимые от языка элементы (включая любые исходные коды и т. Д.) Для VARCHAR2/CHAR и имеют национальный характерный набор для конкретного пользователя, то есть национальный характер, для NVARCHAR2/CHAR.

По моему мнению, в настоящее время нет причин использовать его, поскольку AL32UTF8 (или любое другое кодирование Unicode) может хранить любой символ в любом случае.

Возможно, когда вы работаете на незападных языках, национальный символ, такой как AL16UTF16 или AL32UTF32, несколько полезен с точки зрения хранения и эффективности.

Что касается вас, вопрос: National Charaterset AL16UTF16 способен хранить любой юникодный персонаж, поэтому ваши польские символы не должны быть проблемой. Однако, возможно, ваши клиентские приложения (или выбранный шрифт) не могут отображать такие символы

+0

Thx для вашего ввода. Польские письма не были проблемой, здесь они хорошо хранились. Письма в cyrylic были, но если вы сказали, что это правда, NLS_CHARACTERSET - это главное, о чем нужно следить в будущем, еще раз спасибо :) – AdrianCogiel

+0

* National Charaterset 'AL16UTF16' может хранить любой юникодный символ, поэтому ваши польский персонажи не должно быть проблем. * - Из трех символов, заданных в вопросе - ѼóÂ - только второй польский. –

Смежные вопросы