NLS_NCHAR_CHARACTERSET说明

时间:2014-10-17 10:08:01

标签: oracle nhibernate oracle10g

我必须开始说我不是Oracle用户专家所以我有一些基本的问题:D。我们的应用程序是一个带有Nhibernate数据库连接的MVC。问题在于当我们尝试将像'Ѽó'这样的字符保存到NVARCHAR2字段中时,它们会被保存为问号“?”。为了解决这个问题,我们在数据库中更改为不同的字符集。

以下是我们在安装时的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这样的字段的那些特殊字符?如果没有,那么有人可以向我解释它的用途吗?

编辑:NLS_LANG设置为:POLISH_POLAND.AL32UTF8

1 个答案:

答案 0 :(得分:4)

早期使用国家字符集,即在Unicode可用之前。主要思想是使用公共字符集来存储VARCHAR2/CHAR的语言无关项目(包括任何源代码等),并为NVARCHAR2/NCHAR提供客户特定的,即特定于语言的国家字符集。< / p>

在我看来,现在没有理由使用它,因为AL32UTF8(或任何其他Unicode编码)无论如何都能够存储任何字符。

也许当您使用非西方语言工作时,AL16UTF16AL32UTF32这样的国家角色在存储和效率方面略有益处。

关于你的问题:National Characterset AL16UTF16能够存储任何Unicode字符,所以你的波兰字符应该没问题。但是,您的客户端应用程序(或所选字体)可能无法显示此类字符