ITPub博客

首页 > Linux操作系统 > Linux操作系统 > [20130610]褆与竖线分隔符.txt

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

原创 Linux操作系统 作者:lfree 时间:2013-06-10 16:13:38 0 删除 编辑
[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博客 ” ,链接:https://blog.itpub.net/267265/viewspace-763696/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
熟悉oracle相关技术,擅长sql优化,rman备份与恢复,熟悉linux shell编程。

注册时间:2008-01-03

  • 博文量
    4006
  • 访问量
    7969428