|
数据库字符集转换的新问题(ZHS16GBK->UTF8)??
最初由 jeffli73 发布
[B]看了wyq21973朋友的帖子,当时就有些疑问,因为上面我也提到从理论上讲汉字由ZHS16GBK到UTF8的转换是可能的,是不是因为wyq21973朋友用的Oracle8.1.7,还没提供这种转换呢,但由于当时也没条件试,就放了下来,最近看到论坛里关于字符集的问题又不少,于是决定做一下进一步的实验;
我的PC上本来已经装了一个数据库test1,字符集为ZHS16GBK,今天利用DBCA又建了一个test2,字符集选用UTF8。
实验所用的数据库版本为:Oracle9i Enterprise Edition Release 9.2.0.1.0
''''''''''''''''''''''''''''''
7.小结
[B]在Oracle 9.2环境下,汉字可以由ZHS16GBK转换为UTF8;
数据库服务器选用的字符集虽然可以各不相同,但只要各种相关设置正确,Oracle总是尽可能地将正确的转换结果呈现给客户端的用户。[/B] [/B]
我觉得上述结论可能也不能那么绝对!! "Oracle 9.2环境下,汉字可以由ZHS16GBK转换为UTF8"
这两天我也碰到一个数据库字符集转换的问题. 我需要将一个使用ZHS16GBK的数据库的数据imp到一个UTF8的数据库中, exp倒出文件的字符集也是ZHS16GBK. 我的操作系统是HP11I 英文的,ORACLE9.2设置NLS_LANG为"simple chinese_china.ZHS16GBK"后再imp到UTF8的数据库中时发现exp中报了很多ORA-1401 "inserted value too large for column"的错误,虽然最后也是报"imp succesful with warnning"; 我不太明白UTF8应该是ZHS16GBK的超集怎么会转换不成功呢?? 于是我想将数据库字符集更改为ZHS16GBK,开始使用alter database character set ZHS16GBK 不成功因为ZHS16GBK不是UTF8的超集,因为没看eygle的那篇文章, 于是我直接了props$表, 结果我的数据库起不了,alert日志报好象是12701的 错误"CREATE DATABASE character set is not known"
,http://www.eygle.com/index-special.htm
后来我仔细查1401的错误,又在网上查了些文章,包括jeffli73网友的文章,觉得可能是ORACLE在转化ZHS16GBK到UTF8时候,数据长度变长了,如将一个2字节的字符转化成了UTF8定义的3字节(个人理解,不知是否正确),所以导致字符长度超出了表的列定义的长度因而导致imp报1401的错误,.
可是这有没有比较好的办法解决呢? 因为涉及到的表比较多,一个个去更改表列定义太多了..
另我的数据库更改props$后不能启动,能mount, 是否跟操作系统环境有关?? 因为我好象在哪看到资料说 "create database character set"是跟创建v$nls_parameters动态性能有关, 我觉得可能是操作系统不支持我更改的字符集所以ORACLE 在启动时候报12701 这个错.
我回头再在系统上安装中文语言试试看看..
请各位高手指点迷津!!! |
|