换了内存条 oracle字符集出问题了,做Oracle数据库迁移,碰上了灵异的字符集问题,懵了...

博主在进行Oracle数据库从Windows Server 2003到Fedora Core 9的迁移过程中遇到了字符集问题,导致中文数据导入后显示为乱码。尽管尝试了检查和统一服务器、客户端及dmp文件的字符集设置,但在Linux环境下检测dmp文件字符集时得到的结果与Windows不同,导致问题未解决。博客中详细记录了排查过程和尝试的解决方案,期待有经验的读者提供解答。
摘要由CSDN通过智能技术生成

以下是我的问题:

做Oracle数据库迁移,碰上了灵异的字符集问题,懵了

关键字: oracle字符集, 数据库迁移

从前天开始就出现这个问题,也上网找了很多资料,原理貌似正确,但实践却出现了意想不到的问题

先说一下环境

源数据库

OS:Windows Server 2003

Database:Oracle Database Enterprise Edition 10.2.0.1 for Windows

目标数据库

OS:Fedora Core 9

Database:Oracle Database Enterprise Edition 10.2.0.1 for Linux

再说过程

1.由于本人的机器是双系统,所以先切到Windows 使用远程桌面连到那个装着Server 2003的服务器exp 出来一个test.dmp文件,然后用ipmsg发回本机。

2.重启本机,进入FC9,挂上Windows的FAT32分区,将test.dmp文件复制到FC的oracle用户下面的目录中。

3.然后是就是打开终端imp,输入文件名和buffer size,一敲回车,就出现了下面的内容

# Export file created by EXPORT:V10.01.00 via conventional path

# import done in US7ASCII character set and AL16UTF16 NCHAR character set

# import server uses ZHS16GBK character set (possible charset conversion)

# export client uses ZHS16GBK character set (possible charset conversion)

4.然后如果继续导入的话,就是所有的中文全部变成了乱码

接着说我试过的解决方案

1.google一把,发现有很多人都碰上了类似的问题,大家都一致认为这个问题出现的原因无怪乎跟下面三处地方的字符集有关

# Oracle服务器端

# Oracle客户端

# dmp文件

2.好了,很多人说只要这上面这三个地方的charset一样就可正常导入 ,那么怎么检测呢,很多人说的方法也都是相同的

检测Oracle服务端的charset;

select userenv('language') from dual;

我用这个sql检测出来的结果是

Windows Server 2003:SIMPLIFIED CHINESE_CHINA.ZHS16GBK

Fedora Core 9:AMERICAN_AMERICA.ZHS16GBK

因为这两个明显不一样,正怀疑中,又有很多人说其实这个字符集只看这个查询出来的最后一个,这里都是ZHS16GBK,所以都一样,继续检查Client端

检测Oracle客户端的charset;

Windows Server 2003:HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/NLS_LANG 这个值看是多少,很多说如果最后一个和其它的一样也算通过, 不过我要说的是相信各位在Windows上安装Oracle10g后这个值应该和我的一样吧,都是NA,所以我赶快改正过来,改正后的值是SIMPLIFIED CHINESE_CHINA.ZHS16GBK,这样就和Windows Server的一样了。

Fedora Core 9:又有很多人说linux下要echo $NLS_LANG,这个变量的值要和linux Oracle 服务器端的一样,我检查了一下,是空的,就export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK

OK,这下好了,两边的按理说都应该正确了

检测dmp文件的charset;

Windows:有很多说要用UE-32打开dmp文件检查第二和第三个字节,然后将这两个字节的16进制的字符放入一个sql中执行,比如查看到第二个字符是03,第三个字符是54,那么就执行

#select nls_charset_name(to_number('0354','xxxx')) from dual;

出来的结果就应该是ZHS16GBK

这里我的结果是0354,所以自然也就是ZHS16GBK

Fedora Core 9:在linux检测这两个字节就不是这么容易了,需要使用一个命令

cat /home/oracle/test.dmp |od -x|head -1|awk '{print $2 $3}'|cut -c 3-6

可问题就出在这个上命令了,同样的文件,我检测到的竟然是0345,不是之前在Windows上的0354

天哪,没道理了,还有这种事情!

3.然后,我就没什么可说了,这时如果继续导入的话,就出现下面的

# Export file created by EXPORT:V10.01.00 via conventional path

# import done in ZHS16GBK character set and AL16UTF16 NCHAR character set

貌似少了几行,但是继续操作的话还是多么好看的中文乱码。

特别希望有人出来真正解释一下所发生的一切

[本帖最后由 greenbamboo1111 于 2008-7-16 15:14 编辑]

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值