因实际业务需要,将部分16GBK字符集的数据库变更成AL32UTF8字符集;
问题背景:
变更字符集一般性方法:从老库中导出,导入新库。 但往往导入时会因为字符串长度过长报错ora-12899 。
报错原因是:如果一个varchar2(8)中存的值是 "中国台湾"这样一个词,一个汉字占用2个长度,在zhs16gbk中 占用8个字符,varchar2(8)能刚好存得下。
但如果在utf-8数据库中,同样是这个词"中国台湾",一个汉字占用3个字符,那么varchar2(8)就存不下了,需要扩展成varchar2(12)。
如果能有一种方法,能预先检查zhs16gbk 字符串长度是否满足utf-8就好了!!
无意间搜索MOS,发现ORACLE已经为我们DBA提供了解决方案了, 在8i,9i,10g和11g中将NLS_CHARACTERSET更改为AL32UTF8 / UTF8(Unicode)(文档ID 260192.1)
一、使用csscan的方法,检查数据 是否符合UTF8的要求
二、检查csscan的结果集,并做出相应的数据字典的调整
三、导出用户数据.dmp
四、导入新库(utf-8)
一、Csscan安装(11.2.0.x)Installing Csscan in Oracle RDBMS 11.2.0.x
The default tablespace is SYSTEM, if you plan to run