关于Mysql查询varchar类型错误问题

因为后台所有表ID都是按照雪花算法生成的18位数字,需要对接到Android,Ios和H5,此时H5会出现字符超长溢出,所以直接把ID改为varchar类型。

如我的一张表ID为varchar(18)类型,此时下面两种查询会有不同的结果,查询where条件中不带引号和带引号

可以看出来,第二行查询结果是正确的。原因是当类型不长一致的时候,Mysql会自动做以下转化:

  1. 一个为TIMESTAMP或者是DATETIME,另一个为常量,常量会转化为TIMESTAMP,再进行比较
  2. 一个为DECIMAL或者是整数,整数会转化为DECIMAL,再进行比较
  3. 一个为整数,另一个为字符串,会都转化为浮点型,再进行比较

 即发生了第三种情况的转化,但是整数为准确值,浮点数为精度值,浮点型存储结构是1个符号位,8个指数位,23个尾数,所以当位数超过7位的时候就会不精确,此时查询会出现问题

 

 

 

 

参考自:https://blog.csdn.net/qingfengmuzhu1993/article/details/82788534

转载于:https://www.cnblogs.com/qizhelongdeyang/p/9963700.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值