oracle为适应全球化支持,安装时通常会使用本地化数据库字符集即国家语言支持(NLS)本国语言格式来存储、处理和检索数据。oracle8i支持48种语言、76个国家地域、229种字符集,而oracle9i则支持57种语言、88个国家地域、235种字符集。由于oracle字符集种类多,且在存储、检索、迁移oracle数据时多个环节与字符集的设置密切相关,在应用中数据库开发和管理人员经常会遇到有关oracle字符集方面的问题。

在oracle中文版中使用的字符集为SIMPLIFIED CHINESE_CHINA.ZHS16GBK,字符宽度有很大局限性,对于生僻字或其他扩展字符会出现显示不了,只显示?问号,现在流行的AL32UTF8字符集是9i才出现的,对于8i及以前的版本,则不认识这个字符集。今天在调试安装一个管理系统时,使用了默认数据库字符集,导致某个单位名称的“㯊”字无法显示,又不想重装数据库软件,使用了以下方法成功解决。会损坏原数据库表和数据,请备份并导出数据后操作。

一、运行cmd,cd进入sqlplus.exe所在目录,运行以下命令进入管理。

sqlplus / as sysdba

二、查看字符集。

select   userenv('language')  from   dual;

——SIMPLIFIED CHINESE_CHINA.ZHS16GBK

三、逐条运行以下命令,运行完成后即完成数据编码集转换。

shutdown immediate;
startup mount;
alter session set sql_trace=true; 
alter systemenable restricted session;
alter system set job_queue_processes=0;
alter database open;
alter database character set internal_use utf8;
alter session set sql_trace=false;
shutdown immediate;
startup;

转换完成后再次运行:

select userenv('language')  from dual;

——SIMPLIFIED CHINESE_CHINA.UTF8

四、转换完成后,原数据库表内的数据会变乱字符,有可能导致表也打不开,需要另外建表。
1.切换数据库所属当前用户。

alter session set current_schema=orcl(用户名);

2.删除表。

drop table personnel(表名) cascade constraints;

成功解决问题,重新为此管理系统创建数据库,“㯊”字能够正常显示了。

标签: oracle

添加新评论