问题说明
环境
oracle装在AIX集群,访问客户端为linux服务器。
现象
通过linux服务器,sqlplus插入数据库的记录,读取是中文全部是乱码。
分析
这种情况大多数是客户端和服务器端字符集不一致导致的。
问题解决方法
查询数据库字符集
select userenv('language') from dual;
实际查到的结果为:AMERICAN_AMERICA.ZHS16GBK
执行以下命令,查看第一行中PARAMETER项中为NLS_LANGUAGE 对应的VALUE项中是否和上面的值一样(AMERICAN_AMERICA.ZHS16GBK)。如果不是,需要设置环境变量
select * from V$NLS_PARAMETERS
设置linux服务器字符集,为了永久生效,我将环境变量加到了.bashrc中
export NLS_LANG="AMERICAN_AMERICA".AL32UTF8
结束
自此问题解决,需要说明的是已经写入数据库的中文乱码,并不能正常显示,我理解的原因是写入时的编码和数据库编码不一致,有时间我再去研究一下。