我有一个Postgres模式,如下所示:
问题是,每当我在描述列中保存超过500个字符的文本时,我会收到错误:
value too long for type character varying(500)
在Postgres的文档中,它说类型文本可以有无限的字符。
我用的是postgresql-9.1。
这个表是使用Django 1.4生成的,模型中的字段类型是TextField,如果这有助于进一步解释问题的话。
有什么想法,为什么会发生这种情况,我可以做些什么来解决它?
我有一个Postgres模式,如下所示:
问题是,每当我在描述列中保存超过500个字符的文本时,我会收到错误:
value too long for type character varying(500)
在Postgres的文档中,它说类型文本可以有无限的字符。
我用的是postgresql-9.1。
这个表是使用Django 1.4生成的,模型中的字段类型是TextField,如果这有助于进一步解释问题的话。
有什么想法,为什么会发生这种情况,我可以做些什么来解决它?
7条答案
按热度按时间hgncfbus1#
通过将列指定为
VARCHAR(500)
,您已经明确地设置了500个字符的限制。您可能没有明确地自己这样做,但Django已经在某个地方为您这样做了。当您没有显示模型、完整的错误文本或产生错误的查询时,告诉您哪里是很困难的。如果不需要,请使用非限定的
VARCHAR
,或者使用TEXT
类型。varchar
和text
的长度仅受系统对列大小的限制(大约为1GB)和内存的限制。但是,向varchar
添加长度限定符可以手动设置更小的限制。以下所有内容在很大程度上是等效的:唯一的差异在于报告数据库中继数据的方式,以及违反条件约束时引发的SQLSTATE。
在预准备语句参数、函数调用等中通常不遵守长度约束,如下所示:
而在显式强制转换中,它会导致截断:
因此我认为您 * 正在 * 使用
VARCHAR(500)
列,并且您正在查看错误的表或错误的数据库示例。fivyi3re2#
字符变化与文本不同。请尝试运行
这会将列类型更改为text,它仅限于一些非常大量的数据(您可能永远不会真正命中它)。
hkmswyz63#
我们遇到了同样的问题。我们通过在实体属性定义中添加“length”解决了这个问题:
wfsdck304#
我的问题是,我有数据在表中,所以PostgreSQL不允许我对我的表进行更改!
请将其更改为更大的值!
bf1o4zei5#
我遇到了同样的问题。对于我的例子,我去了pgAdmin〉Schemas〉Tables〉
blog_post
,然后箭头点击“列”,然后找到了列,字符varing(25)。右键点击,然后属性,点击“定义”。最后我看到了“长度/精度”。我把25改为50。就是这样。一切都很好。再次,你需要改变你的列的大小。进入pgAdmin〉Schemas〉Tables〉(你的app_model名称)〉Columns〉(你有问题的列)〉Definition〉Length把大小变大。就是这样!!!
祝你好运!
vptzau2j6#
通过Scot S添加到答案here。
对于Django图像字段或文件字段,
在www.example.com中添加max_lengthmodels.py对我很有效。
w1e3prcc7#
在我的例子中:
迁移a
然后保存一些数据。然后我想迁移回
数据库中已经有类似
"sg"
的数据。只是暂时将其缩短将修复此错误
请注意,如果你有
django-simple-history
安装。到那里,并更改/删除数据以及varying(1)
指示了您应该转到的位置。*