You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL中SnakeFlake ID查询匹配异常问题求助

问题原因解析

当id列类型为varchar(32)时,执行sql1这类字符串列与数值直接比较的语句,MySQL会触发隐式类型转换:自动把id列的字符串值转换成数值类型,再和右侧的数值做比较。

问题的核心在于浮点数精度丢失:

  • 你的两个ID值1768475217040121858和1768475217040121859都是远超2^53(约9007199254740992)的超大整数。MySQL在隐式转换这类超大字符串为数值时,会使用DOUBLE类型存储转换结果。
  • DOUBLE类型的有效精度只有53位,超过这个范围的整数无法被精确表示——相邻的超大整数会被舍入成同一个DOUBLE值。这就导致'1768475217040121858'和'1768475217040121859'转成DOUBLE后数值完全相同,所以用数值1768475217040121858比较时,两行数据都会被匹配到。

而执行sql2时是字符串与字符串直接比较,不会触发隐式转换,MySQL会按字符逐个精确匹配,因此只会返回第一行数据。

当你把id列改回bigint(20)后,列类型与右侧数值类型一致,直接进行整数精确比较,就能正确匹配到唯一的目标行。


内容的提问来源于stack exchange,提问作者dogify

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 13:45:01