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

Django项目PostgreSQL出现integer out of range错误如何解决?

解决Django+PostgreSQL中integer out of range错误

问题原因

你遇到的django.db.utils.DataError: integer out of range错误,核心原因是手机号超出了PostgreSQL中IntegerField对应的整数范围:

  • Django的IntegerField在PostgreSQL里映射为int4类型,取值范围是-2147483648到2147483647(最多10位数字)。
  • 国内手机号通常是11位数字,数值远大于2147483647,插入时就会触发超出范围的错误。

解决方案

最合理的修复方式是修改模型字段类型,推荐两种方案:

方案1:改用CharField(推荐)

手机号本质是字符串(无需做数值运算,可能包含区号等非数字字符),直接存储字符串更合适:

class Enquiry(models.Model):
    product_name = models.CharField(max_length=100)
    product_id = models.ForeignKey(List, on_delete=models.CASCADE)
    user_name = models.CharField(max_length=100)
    user_email = models.CharField(max_length=50)
    user_address = models.CharField(max_length=200)
    # 修改为CharField,设置足够长度适配不同地区手机号
    user_mobile = models.CharField(max_length=20, default='0')

方案2:改用BigIntegerField

如果一定要以数值形式存储,可改用支持更大范围的BigIntegerField(对应PostgreSQL的int8,范围是-9223372036854775808到9223372036854775807):

class Enquiry(models.Model):
    # 其他字段不变
    user_mobile = models.BigIntegerField(default=0)

执行迁移修改数据库

修改模型后,需要更新数据库结构:

  1. 生成迁移文件:
python manage.py makemigrations
  1. 应用迁移到数据库:
python manage.py migrate

额外检查

如果修改字段后仍报错,确认传入的user_mobile值是否符合新字段的要求:

  • 用CharField时,确保传入的是字符串类型(或可转为字符串的合法内容);
  • 用BigIntegerField时,确保数值未超出int8的范围。

内容的提问来源于stack exchange,提问作者Shaheem PP

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 06:45:36