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
相关产品推荐
相关产品推荐

