前不久安装好Oracle数据库后出现了中文乱码的问题。查了一下发现字符集有问题,需要改为ZHS16GBK。在网上搜了下发现原则上建库后不允许修改服务端的字符集,不过还是有办法在不重新建库的前提下修改的。以下是具体步骤:
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 INTERNAL_USE ZHS16GBK;
SQL>SHUTDOWN IMMEDIATE;
SQL>STARTUP;
关键点在于INTERNAL_USE参数,使用了这个参数后可以回避字符集的超集和子集的检验。如果不加这个参数的话,那么新的字符集必须是原来字符集的子集方能修改成功。