[20130610]褆与竖线分隔符.txt

[20130610]褆与竖线分隔符.txt

前几天生产系统系统遇到的一个问题,就是上传数据到医保中心时,总有一条记录总是报传入参数数量不对.传入的内容按照|来分割.我仔细检查发现传入的参数数量正确,数据类型也正确,为什么还是报这个错误.仔细检查才发现问题在这条记录内容上.

我在linux下做一个例子来说明:

$ cat aa.txt
123|张飞褆test|aaa1

$ cut -f1 -d'|' aa.txt
123
$ cut -f2 -d'|' aa.txt
张飞?
$ cut -f3 -d'|' aa.txt
test
$ cut -f4 -d'|' aa.txt
aaa1

--我们数据库使用的字符集:NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK.可以发现正常执行cut -f2 -d'|' aa.txt
--按照正常显示应该是'张飞褆test'.而实际是'张飞?'.

$ cat a1.txt

$ xxd -c 16 a1.txt
0000000: d17c 0a                                  褆.

SQL> @16to10 7c
16 to 10 DEC
------------
         124

SQL> select chr(124) from dual ;
C
-
|

--可以发现7c(16进制)就是|,这样导致系统认为参数的数量不正确.

--按照道理应该还存在许多字符会出现这种情况:(大部分不常使用)
--我管理的数据库有一些还使用AMERICAN_AMERICA.US7ASCII,注意以上问题与字符集无关.
--我执行如下: [说明如果是中文字符集,执行如下语句结果与输出不同]
--数据库字符集AMERICAN_AMERICA.US7ASCII.
select upper(TO_CHAR (167+rownum,'xxxxxxxxxxxxx')) "10to16",chr(167+rownum)||'|' from dual connect by level+160<=254;
10to16 HZ
---------
 A8    ▅
 A9    ﹟
 AA    獆
 AB    珅
 AC    瑋
 AD    瓅
 AE    畖
 AF    瘄
 B0    皘
 B1    眧
 B2    瞸
 B3    硘
 B4    磡
 B5    祙
 B6    秥
 B7    穦
 B8    竱
 B9    箌
 BA    簗
 BB    粅
 BC    紎
 BD    絴
 BE    緗
 BF    縷
 C0    纜
 C1    羭
 C2    聕
 C3    脇
 C4    膢
 C5    舼
 C6    苵
 C7    莬
 C8    葇
 C9    蓔
 CA    蕓
 CB    藎
 CC    蘾
 CD    蛗
 CE    蝲
 CF    蟶
 D0    衸
 D1    褆
 D2    襹
 D3    觸
 D4    詜
 D5    諀
 D6    謡
 D7    讄
 D8    貄
 D9    質
 DA    趞
 DB    踻
 DC    軀
 DD    輡
 DE    迀
 DF    遼
 E0    鄚
 E1    醸
 E2    鈢
 E3    銃
 E4    鋦
 E5    鍇
 E6    鎩
 E7    鐋
 E8    鑭
 E9    閨
 EA    陓
 EB    雦
 EC    靯
 ED    韡
 EE    顋
 EF    飢
 F0    饇
 F1    駖
 F2    騶
 F3    髚
 F4    魘
 F5    鮸
 F6    鰘
 F7    鱸
 F8    鴟
 F9    鵿
 FA    鷟
 FB    鹼
 FC    鼃
 FD    齶
 FE    

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/267265/viewspace-763696/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/267265/viewspace-763696/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值