linux服务器下查询字符集为:AMERICAN_AMERICA.AL32UTF8,
plsql工具查询字符集结果为:SIMPLIFIED CHINESE_CHINA.ZHS16GBK
如何让plsql查询出的结果和服务器保持一致
这是字符集不一致的问题
https://www.cnblogs.com/jackliu2013/p/10166522.html?ivk_sa=1024320u
解决办法:修改注册表
打开注册表,‘开始’-‘运行’ 输入‘regedit’-确定。
找到提示中给出的路径,找到 NLS_LANG 键,他的值原来是:SIMPLIFIED CHINESE_CHINA.ZHS16GBK
修改为:SIMPLIFIED CHINESE_CHINA.AL32UTF8
重新打开plsql ,登录,好了。
可参考如下链接:https://www.cnblogs.com/wuyifu/p/4598766.html ,也可以解决乱码问题
linux服务器是安装oracle的服务器吗?
退出Oracle客户端
在Linux中修改环境变量
vi .bash_profile
添加以下语句
export NLS_LANG="SIMPLIFIED CHINESE_CHINA".AL32UTF8
或者
export NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"
输入命令使配置生效
source .bash_profile
重新登录Oracle客户端查看
select userenv('language') from dual;
——————
客户端配置注册表和服务器一致即可。
SELECT USERENV (‘language’) FROM DUAL; gives the session’s _ but the DATABASE character set not the client, so the value returned is not the client’s complete NLS_LANG setting!
翻译如下
SELECT USERENV (‘language’) FROM DUAL;得到当前会话的 语言_地区 以及 数据库字符集,不是客户端的字符集,所以它返回的值不是完整的客户端NLS_LANG设置!
也就是说,你linux那台机器连接的数据库的字符集是AL32UTF8;你用PLSQLDEV连接的数据库的字符集是ZHS16GBK,连接的是两个不同的数据库。
能通过环境变量保持一致的,只有前面的 语言和地区,而后面的字符集无论怎么改,只要连的是同一个数据库,那么都会保持一致。
详见
如果是临时的你可以通过以下命令临时设置本次命令行模式使用其字符编码 set nls_lang=AMERICAN_AMERICA.ZHS16GBK
永久的就是直接改注册表regedit -> HKEY_LOCAL_MACHINE -> SOFTWARE -> ORACLE -> xxx_homex -> NLS_LANG
本地系统环境变量要加下plsql的路径