为什么以下语句在 MySQL 中是正确的?
CAST(544553000004545482 AS CHAR) = 544553000004545446
- 背景 -
我正在查询一个用户 ID 存储为 的数据库VARCHAR(255)
,但我的程序将这些 ID 表示为整数,因此每当我有 WHERE 条件(例如WHERE userId = %s
. 我最近注意到上面的错误结果,因为在查询以 5446 结尾的用户时,我得到了以 5482 结尾的用户的数据。
我知道这里的解决方案是将数据库转换为 BIGINT 列,或者在查询之前将我的程序转换为字符串,但我想了解为什么上述情况是正确的?我猜这与一点精度错误有关。我注意到从 544553000004545441 - 544553000004545503(包括,因此范围为 63)寄存器中的任何值都是相等的,因此如果 SQL 在某处转换为比 BIGINT 的 2**64 更低的位 int 可以解释截断。