一切的字符乱码问题都是由于字符集选择不当或客户端与服务端的字符集选择不一致导致的。我将解决Oracle汉字乱码的问题解决过程总结如下。
1)选择合适的字符集,在创建数据库时,必须认真地考虑。如果以后更改,会可能丢失数据。如果公司业务仅涉及中文,可以选择ZHS16GBK或zhs16cgb231280。若涉及多国语言可选择AL32UTF8。一个汉字所占的字节数,也取决于所用编码的字符集。
2)更改数据库端的字符集
select * from nls_database_parameters;
select userenv(‘language’) from dual;
1. 关闭数据库
SQL>SHUTDOWN IMMEDIATE
2. 启动到Mount
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;
SQL>ALTER DATABASE NATIONAL CHARACTER SET AL16UTF16;
--如果是从子集到父集,需要使用INTERNAL_USE 参数,跳过超子集检测
SQL>ALTER DATABASE CHARACTER SET INTERNAL_USE AL32UTF8;
SQL>ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE AL16UTF16;
SQL>SHUTDOWN IMMEDIATE;
SQL>STARTUP;
3)修改客户端字符集,如应用程序,sqlplus等
设置环境变量NLS_LANG,与数据库端一致。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/27009266/viewspace-742304/
,如需转载,请注明出处,否则将追究法律责任。