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

时间:2016-05-26 10:03:59

标签: mysql sql sequelpro

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

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

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

每个数字都是唯一的(使用VARCHAR值),将列设置为INT时,所有值都变为相同(2147483647)。请注意,作为VARCHAR的所有值都不包含字母(我选中了它)

现在我不知道为什么会发生这种情况,数据来自CSV,如果记录有不同的数字(不是2147483647),我在Sequel Pro中导入时进行了检查。在GUI中它显示它不同但是当全部导入时它将自动变为2147483647。

发生了什么,我该如何防止这种情况?

2 个答案:

答案 0 :(得分:3)

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

您显示的两个值均超出Int所代表的范围。您需要使用BigInt来形成它们。

答案 1 :(得分:1)

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

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

在这里,您可以找到解释所有Numerical types.

的文档
相关问题