Django 和 PostgreSQL - 值对于类型字符变化来说太长(512)

2024-05-20

我正在从测试 SQLite 数据库迁移到 PostgreSQL 数据库。

我有一个插入到数据库中的示例对象,它在 SQLite 上工作,但在 PostgreSQL 中给我一个错误。

代码片段是:

car = CarItem.objects.create(
    user = motor_trend,
    name = 'Camaro 2010',
    category = cars,
    condition = 'Used',
    price = '28,547.00',
    production_year = '2010',
    color_interior = 'Black',
    color_exterior = 'Inferno Orange Metallic',
    reference = 'PRC17288',
    location_of_creation = 'Undisclosed',
    location_current = 'Columbus, OH, USA',
    description = 'GORGEOUS ORANGE SS!!',
)
car.save()

我得到:

DatabaseError at /create/
value too long for type character varying(512)

Traceback
(...)
    description = 'GORGEOUS ORANGE SS!!',
(...)

我的模型的描述字段的最大字符长度为 512:

description = models.CharField(max_length=512,default='')

但该字符串不可能超过 512 字节。

我读过之前关于此错误的文章,其中一篇涉及编码。看来情况并非如此。

我在 Webfaction 上托管。我创建了一个使用 utf-8 编码的数据库,并继续使用syncdb。 Syncdb 工作完美,但现在该对象插入失败。

有人可以提供一些意见吗?谢谢。


经过一番挖掘后Django 文档 https://docs.djangoproject.com/en/1.3/ref/databases/:

字符字段

使用 VARCHAR 列类型存储的任何字段都有其 最长长度限制为 255 个字符如果你正在使用唯一=真实对于该领域。

强调我的。你有unique=True对于领域? 这是 Django 的限制,PostgreSQL 不会介意。您可能想切换到数据类型text http://www.postgresql.org/docs/current/interactive/datatype-character.html. TextField https://docs.djangoproject.com/en/1.3/ref/models/fields/#textfield用姜戈的话说。


旧观念:

user is a PostgreSQL 中的保留字 http://www.postgresql.org/docs/current/interactive/sql-keywords-appendix.html以及任何 SQL 标准。不要将其用作列名称。

You could如果您将其用双引号引起来,请使用它,但请远离这种愚蠢的行为。只是不要使用标识符的保留字。曾经。

Also ...

user = motor_trend,
name = 'Camaro 2010',
category = cars,

任何特定原因motor_trend and cars没有像其他值一样被引用?外键,就像 @Ignacio 评论的那样?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django 和 PostgreSQL - 值对于类型字符变化来说太长(512) 的相关文章

随机推荐