Oracle中在Nvarchar列中存储值的问题

Oracle中在Nvarchar列中存储值的问题,oracle,character-encoding,Oracle,Character Encoding,我在oracle中有一个带有NVarchar列的表。当我在下面插入值时,它会转换成一些其他字符 Insert INTO tbltest (CONTENT) Values(N'✓ à la mode δ') Select * From tbltest CONTENT -------------------- ¿ à la mode d 那么我应该采用什么数据类型来保存这种类型的数据。请建议。 这是由于您的NLS_字符集、NLS_NCHAR_字符集数据库设置和NLS_语言设置是您看到的客户端。

我在oracle中有一个带有NVarchar列的表。当我在下面插入值时,它会转换成一些其他字符

Insert INTO tbltest (CONTENT) Values(N'✓ à la mode δ')
Select * From tbltest

CONTENT
--------------------
¿ à la mode d 
那么我应该采用什么数据类型来保存这种类型的数据。请建议。

这是由于您的NLS_字符集、NLS_NCHAR_字符集数据库设置和NLS_语言设置是您看到的客户端。
由于您的值具有特定于您的语言的特殊字符,因此需要设置该值。如下所示

对于SQL开发人员,我不知道确切的解决方案,但请检查工具->首选项->环境->编码中的设置

选择支持您的字符的编码,例如UTF-8

关于您的C代码:

用于Oracle的Microsoft.NET Framework数据提供程序已存在多年,您不应在新项目中使用它。我认为开发在20年前就停止了,因此它不支持Unicode字符-您不能使用它

使用现代化的提供程序,例如用于.NET ODP.NET的Oracle数据提供程序,您可以从以下位置下载:

对于.NET的Oracle数据提供程序,您必须将NLS_LANG设置为支持这些字符的编码,例如.AL32UTF8。您可以将NLS_LANG设置为环境变量,也可以在HKLM\SOFTWARE\Wow6432Node\ORACLE\KEY_u%ORACLE_HOME_NAME%\NLS_LANG的注册表中分别设置为32位。HKLM\SOFTWARE\ORACLE\KEY\uu%ORACLE\u HOME\u NAME%\NLS\u LANG用于64位

其他提供程序,例如ODP.NET托管驱动程序或Oracle OraOLEDB,对NLS_LANG不敏感


请参阅此处的更多信息:

您无法使用ALTER SESSION设置NLS_LANG。必须在环境变量或注册表中设置此命令。您使用哪个工具调用此命令?Oracle SQL Developer。从表中获取数据时,C代码中也发生了同样的情况。在C中使用哪个提供程序/驱动程序?ODBC?OleDB?ODP.NET?,…?System.Data.OracleClientThank Wernfried Domscheit,在字符集更改后工作正常。将字符集从WE8MSWIN1252更改为AL32UTF8后,现有clob列数据将转换为其他语言。看起来像瑯捫數灥捴敤晦睤慴攧㸼⅛䍄䅔䅛嵝㸼⽄ 在代码中,它不会像以前存储的那样返回。如何选择?用同样的工具?