You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:MySQL插入Contact_No时出现范围溢出错误的解决方法

解决MySQL Contact_No字段插入超出范围的问题

问题根源

你遇到的Out of range value for column 'Contact_No' at row 1错误,核心原因是MySQL的INTEGER(10)里的10只是显示宽度,不是存储范围。INTEGER默认是4字节,存储范围是-2147483648到2147483647,如果你的手机号是11位(比如国内常见的13xxxxxxxxx),数值已经超过2147483647,自然会触发超出范围的错误,改显示宽度根本解决不了问题。

两种可行解决方案

方案1:改用BIGINT类型

如果坚持用数值类型存储手机号,把字段改成BIGINT(8字节),它的存储范围足够覆盖所有合法手机号:

  • 有符号BIGINT:-9223372036854775808到9223372036854775807
  • 无符号BIGINT:0到18446744073709551615

执行修改表结构的SQL:

ALTER TABLE 你的表名 MODIFY COLUMN Contact_No BIGINT UNSIGNED;

Python插入时确保传入的是整数类型,避免字符串转整数出错:

# 示例(以pymysql为例)
contact_no = 13812345678  # 直接传整数
sql = "INSERT INTO 你的表名 (Contact_No, 其他字段) VALUES (%s, %s)"
cursor.execute(sql, (contact_no, 其他字段值))

方案2:改用VARCHAR类型(更推荐)

手机号本质是字符串,不需要做加减等数值运算,用VARCHAR(20)存储更合理,还能支持带国家码的格式(比如+8613812345678):

修改表结构:

ALTER TABLE 你的表名 MODIFY COLUMN Contact_No VARCHAR(20) NOT NULL;

Python插入时直接传字符串即可:

contact_no = "+8613812345678"
sql = "INSERT INTO 你的表名 (Contact_No, 其他字段) VALUES (%s, %s)"
cursor.execute(sql, (contact_no, 其他字段值))

额外检查点

  • 确认插入的Contact_No值没有包含非数字字符(比如空格、破折号),如果有,要么清理后转整数,要么直接用VARCHAR存储
  • 检查是否不小心把超大数值(比如超过BIGINT范围的数)传入了数据库

内容的提问来源于stack exchange,提问作者Aarav Malik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 09:15:35