4

我有一个 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并且仍然完全相同的错误。

谢谢

4

1 回答 1

2

当 you 时syncdb,Django 还将模型的详细名称存储在其内部django_content_type表中。该表的限制为(从 Django 1.2 开始)100 个字符。拥有一个详细名称超过 100 个字符的模型将导致您遇到的问题。

检查您的应用是否有任何其他名称较长的模型 / verbose_name,并尝试缩短它们。那应该可以解决问题。(Store看起来一点也不长,但也许有一个你没有提到的不同模型。)

顺便说一句,您没有在 SQLite 中看到这一点的原因是,如果我没记错的话,SQLite 不会对 char 字段实施长度限制。

于 2013-08-05T02:28:16.343 回答