select userenv('language') from dual
结果:SIMPLIFIED CHINESE_CHINA.US7ASCII
select * from V$NLS_PARAMETERS
parameter项为NLS_LANGUAGE对应的VALUE值为:SIMPLIFIED CHINESE
Select * From Openquery(ts,'select * from test')
中文正常显示
把环境变量NLS_LANG修改成 SIMPLIFIED CHINESE_CHINA.ZHS16GBK 或者 SIMPLIFIED CHINESE_CHINA.AL32UTF8试试,
"SIMPLIFIED CHINESE"这个东西与字符集没很大关系,后面的"US7ASCII"这个才是字符集,
并且,通过sql是无法查到oracle数据库服务端的字符集的,这个只能看配置文件,但客户端查询是否乱码与Oracle数据库端的字符集本身关系真不大。
还有,”PLSQL Developer“如果开启了unicode,会自动给你转换成可以识别的字符集数据,因此不能用来判断是否存在乱码问题
更多关于oracle字符集的分析,可以看我这篇文章
--
你这样查的字符集NLS_CHARACTERSET,其实就是你在环境变量NLS_LANG里设置的字符集。你可以尝试把环境变量改了后,再重新连接ORACLE执行这个查询,会发现NLS_CHARACTERSET变成了你修改后的字符集。Oracle数据库里并没有提供任何用sql查询的方式来查询数据库的字符集,网上有些文章说的用sql查oracle数据库端字符集的都是错的。
至于plsql developer里,勾上unicode就能正常显示中文了
我觉得你可能得先判断一下原始数据本身是不是已经出现字符集错误的情况了,plsqldev能正常显示,并不代表此时数据的字符集就是正确的,在我上面那篇文章中也有举例
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!