Oracle字符集ZHS16GBK转UTF8实现生僻字显示
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;
成功解决问题,重新为此管理系统创建数据库,“㯊”字能够正常显示了。