oracle chr(0) 隐藏字符串

最近在工作的时候碰到一个很怪异的问题,

查询一个数据的时候拷贝出来,然后拿这一列去查询结果没有匹配到数据,无奈只能用like去匹配数据,这些就是有数据的,

然后翻来覆去对比数据好几次,没发现问题,拷贝出来到文本编辑器也没有发现问题,开始以为是后面存在空格,使用trim()函数后,依旧没有解决,

然后在网上查询  到了问题所在

在这里我又学到一个东西,chr(0) 隐藏字符串,可以隐藏其后面所有字符串,从而达到隐藏效果,这个一般肉眼看不到,只有查询字符串长度的时候才会发现其存在


大家也可以自己动手做做实验来证实一下,很涨逼格的:

下面引用:http://www.itpub.net/thread-707896-1-1.html



SQL>create table t_text (a varchar2(100));

SQL>insert into t_text values('1234');

1 row inserted

SQL>select length(a), '-'||a||'-' from t_text;

LENGTH(A) '-'||A||'-'
---------- --------------------------
         4 -1234-
这时候没有问题
SQL> update t_text set a = a||chr(0);

1 row updated

SQL>commit;
现在加一个chr(0)
SQL>select length(a),'-'||a||'-' from t_text;

LENGTH(A) '-'||A||'-'
---------- -------------------------
         5 -1234
字符串的长度显示是对的,但是结果却根本不是那么回事了
SQL>update t_text set a = a||'5678';

SQL> commit;

SQL> select length(a),'-'||a||'-' from t_text;

LENGTH(A) '-'||A||'-'
---------- --------------------------
         9 -1234
后面的东西没法显示出来了??
SQL> select substr(a,6,4) from t_text;

SUBSTR(A,6,4)
-------------
5678
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值