读书人

SQL里有不看得出字符查询中遇到的奇怪

发布时间: 2012-09-27 11:11:17 作者: rapoo

SQL里有不可见字符查询中遇到的奇怪BUG,求解
今天遇到一个sql的奇怪bug:
chrw(31)是不可见字符,"fuck15"+chrw(31)+"789"组成的字符串在sql里显示是"fuck15`789",5和7中间有一个不可见的字符,暂用"`"代替。
在查询的时候,where语句是lotno > "fuck15!789" 居然把"fuck15`789"那条记录也查询出来啦,
“!”是ASCII码里最小的可见字符,即chr(33),但比chr(31)大,"fuck15"+chrw(31)+"789"小于"fuck15"+chrw(33)+"789",
"fuck15`789"这条记录不应该被查询出来,但是结果是"fuck15`789"那条记录被查询出来啦,哪位大神能解释一下

[解决办法]
字符串的比较不是通过ASCII码来比较的,字符串大小的比较是通过选择的排序规则
[解决办法]

SQL code
--经测,没被选出来with t(col) as(select 'fuck15'+char(31)+'789'union all select 'fuck15!789'union all select 'fuck15'+char(33)+'789')select * from t where col>='fuck15!789'/*col----------fuck15!789fuck15!789(2 row(s) affected)*/ 

读书人网 >SQL Server

热点推荐