在CentOS 6.6上安装Oracle 11g没有设定字符集,采用的是操作系统默认字符集:WE8MSWIN1252,将字符集修改为:ZHS16GBK。
SQL> select userenv('language') from dual;
SIMPLIFIED CHINESE_CHINA.WE8MSWIN1252
SQL> select * from nls_database_parameters where parameter in ('NLS_CHARCTERSET','NLS_NCHAR_CHARACTERSET');
SQL> select* from v$nls_parameters where parameter='NLS_CHARACTERSET';
操作过程如下:
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>ALTER DATABASE national CHARACTER SET INTERNAL ZHS16GBK;
这一行不起作用,执行后出错ORA-00933: SQL 命令未正确结束,不过执行上一行命令已经生效,其他文章里未提到本行。
SQL>SHUTDOWN IMMEDIATE;
SQL>STARTUP
改变字符集后,原来已有的数据不会改变,只是之后新增的数据会是新的字符集。