修改NLS_CHARACTERSET和NLS_NCHAR_CHARACTERSET字符集

2013-07-26

有时候安装oracle未了解清楚需求,设置的字符集导致中文乱码。oracle如何修改字符集呢?

1、查询字符集
SQL> col VALUE format a30
SQL> select * from nls_database_parameters where parameter like '%CHARACTERSET%';

PARAMETER VALUE
------------------------------ ------------------------------
NLS_CHARACTERSET US7ASCII
NLS_NCHAR_CHARACTERSET UTF8
SQL> select value$ from props$ where name='NLS_NCHAR_CHARACTERSET';
VALUE$
-----------------------------
UTF8

2、oracle修改服务器端字符集:
SQL>alter system checkpoint;
SQL>alter system switch logfile;
SQL>SHUTDOWN IMMEDIATE;   
SQL>STARTUP MOUNT EXCLUSIVE;   
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
提示我们的字符集:新字符集必须为旧字符集的超集,这时我们可以跳过超集的检查做更改,INTERNAL_USE提供的帮助就是使Oracle数据库绕过了子集与超集的校验. :
#####################################################################
SQL> ALTER DATABASE character set INTERNAL_USE ZHS16GBK;
SQL> ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE AL16UTF16;
#####################################################################
注意:
1)这样修改会影响数据库中定义了Nclob、NVARCHAR2等大字段的表,会出现乱码。需要重新导入表,当然在修改前要备份相关表。
2)如果没有大对象,在使用过程中进行语言转换没有什么影响,
3)在Oracle8i中,设定的字符集必须是ORACLE支持,假如修改了错误的字符集,数据库将无法启动。不过从Oracle9i开始,Oracle在启动时跳过了这个检查,即使修改了错误的字符集,也仍然可以启动,数据库启动时会将控制文件中的字符集更改为缺省的US7ASCII.
#####################################################################
SQL>SHUTDOWN IMMEDIATE;   
SQL>STARTUP

3、更新系统表(props$)修改字符集
SQL>update props$ set value$='ZHS16GBK' where name='NLS_CHARACTERSET';
SQL>update props$ set value$='AL16UTF16' where name='NLS_NCHAR_CHARACTERSET';

4、如果还没有数据,最好的办法还是用dbca重新创建instance

5、 确认字符集是否修改
SQL> col VALUE format a30
SQL> select * from nls_database_parameters where parameter like '%CHARACTERSET%';
PARAMETER VALUE
------------------------------ ------------------------------
NLS_CHARACTERSET ZHS16GBK
NLS_NCHAR_CHARACTERSET AL16UTF16

分类:数据库 | 标签: |

相关日志

评论被关闭!