【pl/sql】Oracle乱码问题解决

着急的同学可以直接跳到解决办法

环境:

  • PLSQL Developer 13 (64 bit)
  • Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
  • Windows 11

原因分析

对于oracle 这种成熟的产品来说,一般乱码问题服务端出现问题的情况并不多,主要原因为客户端与服务端编码不一致导致;Windows 默认编码为GBK,Linux (CentOS\RedHat等)默认编码UTF-8,一般来说,如果未对系统或者客户端进行配置,编码不一致的情况很普遍;
这里提供的是一种检查客户端与服务端编码是否一致及解决的办法。

问题修复

查询Oracle数据库编码

通过执行如下sql,查看Oracle数据库当前编码方式

select * from nls_database_parameters;

查询结果举例:
在这里插入图片描述
通过执行如下sql,查看当前会话相关编码方式

select * from V$NLS_PARAMETERS;

查询结果举例:
在这里插入图片描述

对比以上两份配置,重点关注NLS_CHARACTERSET、NLS_LANGUAGE、NLS_TERRITORY这三条记录,一般来说这三条数据的值应该是一致的,如果不一致,可继续向下看(另:请注意检查oracle客户端与服务端版本的版本(instantclient_21_3))

查询PL/SQL 配置

登录数据库后,通过plsql的help-> support info 菜单,查看其中的编码设置:
在这里插入图片描述

一般情况下,NLS_NCHAR_CHARACTERSET、 NLS_CHARACTERSET: AL32UTF8两处的值与 V$NLS_PARAMETERS表查出来的值是一样的,不一样也就是造成编码不一致的原因,这种情况下,可以通过配置NLS_LANG环境变量解决。

需要注意的是,当配置错误的NLS_LANG环境变量,可能导致plsql无法正常连接数据库,当配置错误的时候,建议先删除或者重命名,待plsql连接数据库查出正确的值后再进行修改

解决办法

通过如下值,查询当前用户环境变量值:

select userenv('language') from dual;

查询结果示例
在这里插入图片描述

通过系统-> 关于 -> 高级系统设置 设置如下环境变量(变量值为以上sql查询结果)
NLS_LANG=SIMPLIFIED CHINESE_CHINA.AL32UTF8
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值