Django表单/数据库错误:值超过字符类型(4)的长度限制
我正在尝试把一个来自Stripe(一个收费服务)的公司ID(大约200个字符)保存到我的Django数据库里。
我遇到的具体错误是:
database error: value too long for type character varying(4)
我该如何让Django支持更长的值呢?
我看到了一些内容:
值太长,超出了字符可变类型的限制和: Django数据导入失败,提示“数据库错误:值太长,超出了字符可变类型的限制(50)”我的数据库已经按照我的网络主机设置为UTF-8编码。
编辑:我看到有个回答建议把列的宽度调大。这需要修改PostgreSQL数据库吗?
我的具体系统是Webfaction,使用CentOs共享机器,Django在PostgreSQL上运行。我非常希望能对发生了什么以及如何解决这个问题有一个概念性的了解。
3 个回答
我在使用Django 1.11和Postgres 9.6的时候,遇到了一个问题,原因看起来并不明显。
我在迁移文件中设置了 max_length=255,然后执行了:
manage.py migrate
接着,我在模型中设置了正确的长度 max_length,然后又运行了一次 makemigrations,最后再次执行了 migrate。
如果你在使用Django 3和Postgres时遇到这个错误,可以参考以下步骤。
第一步:找到你的迁移文件夹。
第二步:打开你最近的迁移文件。
第三步:查看迁移文件里的操作列表。
第四步:把字段或表格列的最大长度更新为一个更大的数字,以便能存放你的数据。
没错,把这一列的宽度调宽点。错误信息很清楚:你的200个字符太多了,放不进varchar(4)里。
首先,要把你的模型字段中的 max_length
属性从4改成一个你认为足够大的数字,这样才能装下你要输入的数据。
接下来,你还得更新数据库中的这一列,因为django不会自动更新已经存在的列。
这里有几种方法:
1: 删除数据库,然后再运行syncdb。警告:你会丢失所有的数据。
2: 通过SQL手动更新这一列:
输入 python manage.py dbshell
进入数据库命令行,然后输入
ALTER TABLE my_table ALTER COLUMN my_column TYPE VARCHAR(200)
3: 学习并使用像django south这样的数据库迁移工具,这样可以帮助你保持数据库和模型代码的一致性。