这个问题已经困扰我好久了,查了很多论坛帖子,说的方法大多是客户端与服务器的字符集不匹配。
我按照说的方法用select * from v$nls_parameters;这个句子查出来的应该是数据库服务器的字符集吧,得到如下数据:
PARAMETER VALUE
---------------------------------------------------------------- ----------------------------------------------------------------
NLS_LANGUAGE AMERICAN
NLS_TERRITORY AMERICA
NLS_CURRENCY $
NLS_ISO_CURRENCY AMERICA
NLS_NUMERIC_CHARACTERS .,
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD-MON-RR
NLS_DATE_LANGUAGE AMERICAN
NLS_CHARACTERSET ZHS16GBK
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_NCHAR_CHARACTERSET AL16UTF16
NLS_COMP BINARY
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP FALSE
19 rows selected
其实上面说的意思就是LANG=‘AMERICAN_AMERICA.ZHS16GBK’,对吧?
然后查注册表中NLS_LANG的值也是AMERICAN_AMERICA.ZHS16GBK,这个代表的应该是客户端的字符集吧?按说应该是跟服务器的是一样的啊?
对了,注册表中的值是我修改过的,之前是‘SIMPLIFIED CHINESE_CHINA.ZHS16GBK’,不过我感觉最后面的ZHS16GBK字符集都是一样的就可以了吧,反正我改成AMERICAN_AMERICA.ZHS16GBK还是不能显示汉语。。。
最后,我添加环境变量NLS_LANG其值为SIMPLIFIED CHINESE_CHINA.ZHS16GBK,同时将注册表中相应项也改为相同,退出重连,悲剧的是汉字还是不能显示~~!!!
求懂的人分析下原因。。。。小弟在此谢谢了。