我试图将我的数据库中的列从VARCHAR设置为INT(值已经在数据库中)
执行此操作时,会发生以下情况(示例):
| number (varchar) | number (int |
| 20090911913 > 2147483647 |
| 3009092113 > 2147483647 |
每个数字都是唯一的(使用VARCHAR值),将列设置为INT时,所有值都变为相同(2147483647)。请注意,作为VARCHAR的所有值都不包含字母(我选中了它)
现在我不知道为什么会发生这种情况,数据来自CSV,如果记录有不同的数字(不是2147483647),我在Sequel Pro中导入时进行了检查。在GUI中它显示它不同但是当全部导入时它将自动变为2147483647。
发生了什么,我该如何防止这种情况?
答案 0 :(得分:3)
当你转换超出有符号整数类型Int
范围的数字时,它是从-2147483648 ... 2147483647(即从-2 31 到2 31 < / sup> -1),MySql将值限制为可以存储在Int
中的最大值,即2147483647。
您显示的两个值均超出Int
所代表的范围。您需要使用BigInt
来形成它们。
答案 1 :(得分:1)
尝试将列的类型更改为BIGINT
,这可以解决您的问题。
此处的问题是VARCHAR
中存储的数字大于INTEGER
可以容纳的最大数量,因此超出范围。
在这里,您可以找到解释所有Numerical types.
的文档