oracle中文乱码的问题解决

Oracle中文乱码,必然是Oracle字符集和Linux服务器字符集设置不一致造成的。
解决方法总结如下:
首先用SQL> select userenv(‘language’) from dual;
#查看oracle当前的字符集,如果当前字符集不是AMERICAN_AMERICA.ZHS16GBK
修改为AMERICAN_AMERICA.ZHS16GBK,修改方法如下:
查看数据库的字符集
select * from v$nls_parameters;
select * from nls_database_parameters;

修改字符集:
SQL> conn /as sysdba
SQL> shutdown immediate;
SQL> startup mount
SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION;
SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0;
SQL> alter database open;
SQL> ALTER DATABASE CHARACTER SET ZHS16GBK;
ORA-12712: new character set must be a superset of old character set
SQL> ALTER DATABASE character set INTERNAL_USE ZHS16GBK;
–我们看到这个过程和之前ALTER DATABASE CHARACTER SET操作的内部过程是完全相同的,也就是说INTERNAL_USE提供的帮助就是使Oracle数据库绕过了子集与超集的校验.
SQL> shutdown immediate;
SQL> startup
SQL> select userenv(‘language’) from dual; # Oracle查看字符集,发现已经修改

然后修改oracle用户(或者安装oracle数据库时指定的用户)的~/.bash_profile文件,添加
NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
export NLS_LANG
两行,保存退出,执行source ~/.bash_profile使之立即生效。
重新登录Oracle数据库服务器即可成功插入中文

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注