带有MySQL的Django:DatabaseError(1406,“第1行的列'名称'的数据太长了”)

时间:2013-04-30 22:26:03

标签: python mysql django django-models

我有一个Django webapp,目前正在使用SQLite进行测试,但现在想要部署和使用MySQL,我收到了这个错误。

使用python manage.py syncdb时,我收到此错误:

You just installed Django's auth system, which means you don't have any superusers defined.
Would you like to create one now? (yes/no): no
DatabaseError: (1406, "Data too long for column 'name' at row 4")

当尝试使用此代码创建Store对象(其中一个模型)时:

store_leicester = Store.objects.create(
    name='Hugo Boss UK Store Leicester Square',
    country='United Kingdom',
    district='London',
    catalog=catalog ...
)

错误:

DatabaseError at /populate/
(1406, "Data too long for column 'name' at row 1")

例如,商店模型是:

class Store(models.Model):
    """
    Class for a Store.
    """

    name = models.TextField(max_length=128)

    country = models.TextField(max_length=64)
    district = models.TextField(max_length=64)

    catalog = models.OneToOneField('ShopCatalog', related_name='shop', null=True)
    chain = models.ForeignKey('StoreChain', related_name="shops", null=True)

现在很自然地,这些10-15个字符的文本不超过128个字符的限制,所以还有其他的东西在继续。从syncdb上出现错误的事实开始。

我正在使用我自己创建的两个使用模型的Django包,但我认为这不是问题所在。

架构上的默认排序规则是latin-1,但我尝试切换到utf-8但仍然完全相同的错误。

谢谢

1 个答案:

答案 0 :(得分:2)

当您syncdb时,Django还会将模型的详细名称存储在其内部django_content_type表中。该表的限制为(自Django 1.2起)100个字符。如果模型的详细名称超过100个字符,则会导致您遇到的问题。

检查您的应用是否包含任何其他具有长名称/ verbose_name的模型,并尝试缩短它们。这应该解决问题。 (Store似乎没有多长时间,但也许你提到的模型不同。)

顺便说一下,你没有在SQLite中看到这个的原因是,如果我没记错,SQLite不对char字段强制实施长度限制。