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

MySQL 5.7.28中字符串与数值相等判断结果为1的原因咨询

MySQL字符串与大数值比较返回1的原因及处理规则

你遇到的问题核心是大数值超出整数范围后,隐式类型转换导致浮点数精度丢失,具体规则如下:

  • 当字符串与数值类型比较时,MySQL会优先尝试将字符串转为数值类型:
    • 如果字符串表示的数值在BIGINT的取值范围内(最大为9223372036854775807),会转为整数进行精确比较;
    • 一旦数值超出BIGINT范围,MySQL会将其转为DOUBLE浮点数处理。
  • DOUBLE类型的有效精度仅为15-17位,你使用的两个数值有效数字远超这个范围,转换后会被近似为同一个浮点数,因此比较结果返回1。

你可以通过以下语句验证精度丢失的情况:

select cast('441000000000007999400540' as double), cast(441000000000007999671682 as double);

执行后会看到两个值转换后的结果完全一致。

如果需要精确比较这类超大数值,建议使用字符串比较,将两边都以字符串形式对比:

select '441000000000007999400540' = '441000000000007999671682';

此时结果会返回0,符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 16:23:13