分类: MySQL
ORACLE11g修改数据库字符集

dbca建立数据库实例的时候,编码选错了,导入备份以后,中文汉字全部用?号显示,
查询默认编码、字符集参数

selectuserenv('language') from dual;
select name,value$ from props$ where name like '%NLS%';
select * from nls_database_parameters;

LS_CHARACTERSET是数据库字符集,NLS_NCHAR_CHARACTERSET是国家字符集
ORACLE中有两大类字符型数据,VARCHAR2是按照数据库字符集来存储数据。
而NVARCHAR2是按照国家字符集存储数据的。同样,CHAR和NCHAR也一样,一是数据库字符符,一是国家字符集。

转换字符集,数据库应该在RESTRICTED模式下,先要确定修改后的字符集是不是修改前的超集,如果不是可能出现相同的代码点对应不同的字符,出现乱码的问题。
出现这个错误是 oracle 只支持从子集到超集的转变

转换步骤如下:

SQL> shutdown immediate;
SQL> startup mount;
SQL> alter system enable restricted session;
SQL> alter system set job_queue_processes=0;
SQL> alter database open;
SQL> alter database character set internal_use UTF8;
SQL> shutdown immediate;
SQL> startup
SQL> alter system disable restricted session;

转换完编码以后在次查看

selectuserenv('language') from dual;
select name,value$ from props$ where name like '%NLS%';
select * from nls_database_parameters;

如果是新建的db,直接删除掉,重新建立下比较好,若是老系统,建议做好完备的备份,因为这个操作可能会损坏数据库;


相关博文:

发表新评论