Python使用mysql.connector插入大整数时SQL自动变更数值的问题
问题原因
- MySQL中
INTEGER(即INT)类型为有符号32位整数,存储上限为2^31 - 1 = 2147483647,你插入的数值25683838382092010098988远超过该上限。 - 字段定义里的
INTEGER(255)中的255是显示宽度,和存储容量没有任何关系,不会提升数值存储上限。 - 当MySQL未开启严格SQL模式时,插入超出字段类型上限的数值会自动截断为该类型的最大允许值,不会抛出错误,所以最终存储的是2147483647。
解决方案
根据你的数值大小和使用场景选择对应方案即可:
- 若后续插入的数值不超过
9223372036854775807(有符号64位整数上限),将字段类型替换为BIGINT即可,建表语句修改为:
CREATE TABLE cleaned_data (myid VARCHAR(255), mynum BIGINT)
- 若数值超过BIGINT上限、且需要做数值运算:使用
DECIMAL类型,指定足够的精度即可,比如要存最多30位整数就定义为DECIMAL(30,0)(第二个参数0表示没有小数位),建表语句示例:
CREATE TABLE cleaned_data (myid VARCHAR(255), mynum DECIMAL(30,0))
- 若仅需存储展示、不需要做加减比较等数值计算:可以直接用
VARCHAR类型存储整数字符串,不会出现溢出问题。
可选优化:建议开启MySQL严格模式,插入溢出数值时会直接抛出错误,避免静默截断导致数据异常无法感知。
内容的提问来源于stack exchange,提问作者myname
相关产品推荐
相关产品推荐

