|
强烈要求置顶
不管怎么样,还是要先理解Oracle字符集合的原理,至于工具吗
对于程序员,在任何情况下都不是问题,我想拿一个简单的dmp文件
来说明dmp的结构,使用system将用户scott导出,如果用WinHex打开
dmp文件,可以看到第2,3字节为0354=852
select nls_charst_name(852) from dual 可以看到所对应的字符集合
我们在看看oracle 的exp 工具都做了什么,拖动Winhex的窗口,我门在ASCII拦中间会突然看到熟悉的代码Create table ........Insert Into Dep t.....,,到此我终于对oracle的字符集合大彻大悟了exp 工具导出的文件是采用Sql语句的方式,如果是oracle数据库里面能正常显示和插入中文,那么该oracle导出的dmp文件一定包含Insert into Dept values ( ' 例子')......等等类试的信息,对于原来字符集合是us7ascii 的oracle, 除了第2,3字节不是0354以外,后面的信息都差不多,但是有个前提,在us7ascii中要能正常的显示和插入汉字所以使用Winhex将前面2,3字节改为0354既能将us7ascii 的exp的dmp正确导入oracle 817 ZHS16GBK,这也不是欺骗oracle,只是告诉oracle正确的字符集合,正常的情况的下oracle817的翻译是中文翻译(zhs16gbk),如果你导出的dmp中2,3字节请的不是中文翻译( 不等于0354) ,那么oracle 自然会请一个与你的dmp相同翻译去翻译,自然会出现乱码问题,一点不奇怪,明白这个道理,我想是不会在碰到字符集合的导入导出问题了,可怜的motopzax,这是我重复试了n次才得到的经验,希望对大家有所帮住。还有楼上的实际java上传个852 ,然后直接seek(1)
最后在writeShortInt(852)即可以了 |
|