在 MySQL / Sequel Pro 中将 VARCHAR 列转换为 INT

Converting VARCHAR column to INT in MySQL / Sequel Pro

我正在尝试将数据库中的列从 VARCHAR 设置为 INT(值已经在数据库中)

执行此操作时,会发生以下情况(示例):

| number (varchar) | number (int |
| 20090911913      > 2147483647  |
| 3009092113       > 2147483647  |

每个数字都是唯一的(具有 VARCHAR 值),当将列设置为 INT 时,所有值都变得相同 (2147483647)。请注意,所有值都是 VARCHAR 时不包含字母(我检查过)

现在我不知道为什么会这样,数据来自 CSV,我在 Sequel Pro 中导入时检查记录是否有不同的编号(不是 2147483647)。在 GUI 中它显示它是不同的但是当所有导入时它会自动变成 2147483647.

这是怎么回事,我该如何预防?

当您转换超出有符号整数类型 Int 范围的数字时,即从 -2147483648.. 2147483647(即从 -231 到 2 31-1), MySql 将值限制为可以存储在 Int 中的最大值,即 2147483647.

您显示的两个值都在 Int 可表示的范围之外。您需要使用 BigInt 来代替它们。

尝试将列的类型更改为 BIGINT ,这应该可以解决您的问题。

这里的问题是 VARCHAR 中存储的数字大于 INTEGER 可以容纳的最大数字,因此超出了范围。

在这里您可以找到一份解释所有关于 Numerical types.

的文档