Django和PostgreSQL - 类型字符变化的值太长(512)

时间:2012-01-07 05:06:56

标签: django postgresql psycopg2 django-database

我正在从测试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运行良好但现在这个对象插入失败。

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

1 个答案:

答案 0 :(得分:4)

Django documentation中进行了一些挖掘:

  

字符字段

     

使用VARCHAR列类型存储的任何字段都有   如果您使用 unique = True ,则max_length 限制为255个字符   为了这个领域。

强调我的。这个领域你有unique=True吗? 这是一个Django限制,PostgreSQL不介意。您可能希望切换到数据类型text。 Django用语TextField


旧观点:

user reserved word in PostgreSQL和任何SQL标准。不要将它用作列名。

可以使用它,如果你用双引号括起来,但远离那个愚蠢。只是不要将保留字用于标识符。如初。

另外......

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

motor_trendcars没有像其他值一样被引用的任何特殊原因?外键,如@Ignacio评论?