最近在工作的时候碰到一个很怪异的问题,
查询一个数据的时候拷贝出来,然后拿这一列去查询结果没有匹配到数据,无奈只能用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