我必须开始说我不是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
答案 0 :(得分:4)
早期使用国家字符集,即在Unicode可用之前。主要思想是使用公共字符集来存储VARCHAR2/CHAR
的语言无关项目(包括任何源代码等),并为NVARCHAR2/NCHAR
提供客户特定的,即特定于语言的国家字符集。< / p>
在我看来,现在没有理由使用它,因为AL32UTF8(或任何其他Unicode编码)无论如何都能够存储任何字符。
也许当您使用非西方语言工作时,AL16UTF16
或AL32UTF32
这样的国家角色在存储和效率方面略有益处。
关于你的问题:National Characterset AL16UTF16
能够存储任何Unicode字符,所以你的波兰字符应该没问题。但是,您的客户端应用程序(或所选字体)可能无法显示此类字符