我使用oracle和c#,我插入嵌入在c#代码中,我的列(NVARCHAR2)和使用 N'字符串'。 插入我的机器时是正确的,但是当在服务器(另一台机器)中运行我的应用程序时,我看到了问号(????)。
答案 0 :(得分:1)
当你说你在服务器上运行时,你的意思是通过SQL * Plus?
要检查的第一件事是存储实际字符 - 使用DUMP函数来检查:
这将告诉您实际存储的内容。如果客户端应用程序和Oracle服务器之间的链条不合适,则可能会发生字符集转换。
假设正在保存正确的字符,那么您在服务器/ sqlplus上看到的是显示的字符转换。即Oracle正在“正确地”提供角色,但是显示器没有按照您的预期处理它。要解决此问题,您需要将NLS_LANG环境变量设置为正确的字符集。
例如,在最近的项目中默认:set NLS_LANG=AMERICAN_AMERICA.US7ASCII
然后查询一些数据:
NAME
-----------------------------------
MS ELLIE MARTALL
可是:
set NLS_LANG=AMERICAN_AMERICA.US8PC437
然后运行查询:
NAME
-----------------------------------
MS ÉLLIE MARTALL
还有:
set NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P15
得到:
NAME
-----------------------------------
MS ╔LLIE MARTALL
这里的关键是实际数据是相同的,它是显示在显示器上的数据的方式不同,并且该行为可以由NLS_LANG控制。
答案 1 :(得分:0)
在系统变量环境中我添加NLS_LANG = AMERICAN_AMERICA.US8PC437 我的问题是对的!