利用CSSCAN Utility 和 CSALTER Script进行Oracle DB的字符集转换手记
-Leaf Zhu (2010-11-22)
前言:
目前connect DB字符集都是AL32UTF8,但在我们日常操作中,过去可能会不小心建立了数据库是WE8ISO8859P1。如何将字符集改变呢。通常我们的做法有2种:1)重建DB 2)利用CSSCAN Utility 和 CSALTER Script进行Oracle DB的字符集。
建好DB后发现字符集不对,岂非痛心疾首。是推倒重建,还是曲线救库?
呵呵,以前都是用第一种方法。这次,我参考了Oracle官方文档,小试了把我的测试库,效果还不错。把字符集转换过程中遇到的问题和解决方法,以及详细攻略记录下来供大家参考。
当然最好是建库前就考虑好字符集等问题,三思而后行,避免亡羊补牢,因为转换有风险,数据库操作需谨慎。如果库中已经存在数据,不是所有字符都可以成功转换滴,而且转换只能从下往上(字符集子集向字符集父集转换是可行的),
字符集转换规则:
字符集子集向字符集父集转换是可行的,如ZHS16CGB231280向ZHS16GBK转换;而字符集父类向字符集子集进行转换时,会损失部分数据。
只包含英文字符数据的双字节字符集也可向单字节字符集转换,如ZHS16GBK(English Only)可以向US7ASCII正确转换。
编码范围相同的单字节字符集之间通常可以进行相互转换。
请注意,这里所说的没有数据损失,是指一种字符集A转换成另一种字符集B之后,可以再从字符集B正确转换成字符集A或字符集B能够正确表示字符集A中转换过来的数据。
CSSCA N Utility 和 CSA LTER Script:
CSSCAN Utility:用于检索字符集转换可能遇到的问题以及truncation of data.
CSALTER Script:是Database Character Set Scanner utility的一部分,用于转换字符集