oracle字符集问题

linux服务器下查询字符集为:AMERICAN_AMERICA.AL32UTF8,
plsql工具查询字符集结果为:SIMPLIFIED CHINESE_CHINA.ZHS16GBK
如何让plsql查询出的结果和服务器保持一致

img

img

这是字符集不一致的问题
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;
——————
客户端配置注册表和服务器一致即可。

你确定你连的是同一个数据库?在oracle官方文档中有说明

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,连接的是两个不同的数据库。

能通过环境变量保持一致的,只有前面的 语言和地区,而后面的字符集无论怎么改,只要连的是同一个数据库,那么都会保持一致。
详见

【ORACLE】谈一谈Oracle数据库使用的字符集,不仅仅是乱码_DarkAthena的博客-CSDN博客_oracle数据库默认字符集 一、前言先看一个比较有意思的案例上面这个sql,查询了a和b两个字段,均为"张三"两个汉字,并且使用length函数检查,长度均为2。但是,当你看到下面这几个sql的输出结果时,很有可能第一反应是:"这特喵的怎么可能?"其实,你所看到的两个"张三",的确长得是一模一样,用显微镜去看也不可能看到区别。但为什么a和b不相等呢?这是因为组成他们的成分不一样,这个成分就是 字符集二、什么是字符集?百度百科简单来说,字符(Character)是各种文字和符号的总称,包括各国家文字、标 https://darkathena.blog.csdn.net/article/details/122659532

如果是临时的你可以通过以下命令临时设置本次命令行模式使用其字符编码 set nls_lang=AMERICAN_AMERICA.ZHS16GBK
永久的就是直接改注册表regedit -> HKEY_LOCAL_MACHINE -> SOFTWARE -> ORACLE -> xxx_homex -> NLS_LANG

本地系统环境变量要加下plsql的路径