oracle导入半个汉字的问题

最近在一次数据采集过程中遇到一个难题,真正来说不是遇到是最近才发现,原来一直都存在可能没太注意,我先来描述一下吧。我们这个系统需要数据是由上游系统给的,这些数据以文本文件以定长格式给出,这就是我们的源数据;上游系统把数据整理好以后会放在FTP上,我们去下载。下载后我们用sqlloader把数据加入进oracle数据库。如果一切都是合法的,那么不会有什么问题,我这里说的合法,是因为后面要说的上游给的数据会有半个中文字的非法字符。问题就在于出现这种半个汉字的问题,因为定长,可能上游系统在处理数据的时候会截字符,有的时候就会把一个汉字截成两半了,比如说"a你好"如果用substr(‘a你好’,1,2)截的话会把你截成两半,当然你如果想在plsql客户端上试,可能会失败会截成'a你',大概是我们的windows客户端在用这个函数时是截的字符吧,不是截的字节。但是你如果不相信一定要信的话可以用sqlloader ;这里建一个test表,里面就一个test字段,用char,varchar2类型都可以。执行合令看一下是不是导不进去,如果你导成功了,那么可能是其他原因,这里我们在后面再说。

因为我们以前没有去看他的sqlloader的log文件所以都以为导进去了,其实我们的sqlloader命令里写了errors=100000这就是说有这么多的错误行都是充许,其他没错的行是可能导进去的。所以就忽略了错误的行。

现在问题出来了,总要解决啊,当然首先看日志报错信息。记录 587: 被拒绝 - 表 SOURCE_JGB 的列 DZ 出现错误。
多字节字符错误。这就是说哪个表哪个字段的多字节错误,我去看错误数据发现这个字段最后是一个?号,这是在windows下,我们知道一般乱码有时也是用这个符号的,于是我去unix下查看(这里忘说了,我们的oracle服务器是在AIX unix机上的),用VI打开文结果报字符转换错误,也就是那个?号其实是一个半个汉字。网上查了些资料没有一个说出了解决办法,很不幸,我这里也没有解决办法。有些人说用字符集参数设置字符集,这里可以说是在浪费时间,半个中文字用哪种中文字符符都是无法识别的除非用西文字符集,但是用西文字符集其他好的中文就全乱码了;所以网上有一个人解决了是用西文字符集,但是他的前提是他没有其他中文内容。我们这里是有很多其他中文的。另外我上面说你有可能不会重现这个错误是因你的oracle服务器用的是windows,如果是windows为什么可能会导进去呢?因我们在windows下查看该数据时是一个?号,这就是windows有一种中文字符集他在遇到这种不能识别的半个中文字符时返回一个默认的字符给你,所以你可能会导进去。可是我在aix,或oracle中好像没有找到有这种遇到不识别字符返回一个默认字符的。也正是这个原因,导至我的问题也不能解决,其实我不要求一定要把这个字符正确导进去,我只要求这条数据进去,这半个汉字是乱码,或是什么都没什么关系。弄了两天还是没有结果,只好作罢,干脆把这个字段不导数据,反正系统也没用到这个字段。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值