了解 MySQL 中的数字列转换
当插入较短的列时,MySQL 经常将长整数转换为意外值。 MySQL 不是截断,而是调整存储的值。这种行为归因于整数溢出机制。
例如,考虑一个名为 some_number 、长度为 10 的列。当插入超过此长度的数字(例如 715988985123857)时,它会转换为 2147483647。
溢出机制
根据MySQL文档,当计算结果超过数据类型允许的最大值时,就会发生整数溢出。在本例中,10 位整数的最大值为 2147483647。
计算结果公式
转换遵循特定公式:
Result = Number % (2^Bits) - 1
其中:
在我们的示例中,Number 为 715988985123857,Bits 为 10,结果为:
2147483647
BigInt 与 Int
要避免整数溢出,请对较大的整数使用 bigint 数据类型。 BigInt 最多可以存储 2^63-1 的值,防止截断或转换问题。
以上是为什么 MySQL 会将大整数转换为较短的列?的详细内容。更多信息请关注PHP中文网其他相关文章!