mysql 关闭隐式转换_关于MySQL隐式转换

问题发现

之前在学习sql注入时,有时感觉不应该得到的值却也得到了,没想明白是为什么,比如说:

select * from users where id=1'

这样的sql语句是照样可以把id=1的一行取到的,后来查了相关资料,了解到这是MySQL的隐式转换。

大体内容

这个链接给出了隐式转换中的一些规则,不过关于字符串的更加详细的规则,官方并没有给出,指出了这样一句话,

In all other cases, the arguments are compared as floating-point (real) numbers. For example, a comparison of string and numeric operands takes places as a comparison of floating-point numbers.

大致意思是:在所有其他情况下,将参数作为浮点数(实数)进行比较。 例如,将字符串和数字操作数进行比较,将其作为浮点数的比较。

然后给了几个例子,我们可以从例子中总结一些规律。

mysql> SELECT 1 > '6x';

-> 0

mysql> SELECT 7 > '6x';

-> 1

mysql> SELECT 0 > 'x6';

-> 0

mysql> SELECT 0 = 'x6';

-> 1

上面可以总结一下,字符串转换为数字时,从左边开始处理,遇到非数字字符,就停止了,如果第一个字符就是非数字字符,则为0,所以最开始那条sql语句也可以解释通了,相当与id=1。

总结

隐式转换还会发生在很多场景,比如操作符之类的,目前还没有太多sql经验,无法总结,总之这个坑挺大的,给sql注入也带来了很多可能,后面会再总结一些相关知识的。

参考链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值