
着急的同学可以直接跳到解决办法
对于oracle 这种成熟的产品来说,一般乱码问题服务端出现问题的情况并不多,主要原因为客户端与服务端编码不一致导致;Windows 默认编码为GBK,Linux (CentOS\RedHat等)默认编码UTF-8,一般来说,如果未对系统或者客户端进行配置,编码不一致的情况很普遍; 这里提供的是一种检查客户端与服务端编码是否一致及解决的办法。
通过执行如下sql,查看Oracle数据库当前编码方式
select * from nls_database_parameters;查询结果举例:

通过执行如下sql,查看当前会话相关编码方式
select * from V$NLS_PARAMETERS;查询结果举例:

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