Django с MySQL: DatabaseError (1406, слишком длинные данные для имени столбца в строке 1)

У меня есть веб-приложение Django, которое в настоящее время тестируется с 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 и все равно точно такая же ошибка.

Спасибо


person Community    schedule 30.04.2013    source источник
comment
Возможно, вы захотите проверить схему в MySQL, чтобы проверить длину столбца. Я бы также рекомендовал использовать такой инструмент, как django-debug-toolbar, чтобы увидеть, какие запросы на самом деле генерируются.   -  person Michael C. O'Connor    schedule 01.05.2013


Ответы (1)


Когда вы syncdb, Django также сохраняет подробное имя вашей модели в своей внутренней django_content_type таблице. Эта таблица имеет ограничение (начиная с Django 1.2) 100 символов. Наличие модели, подробное имя которой превышает 100 символов, вызовет проблему, с которой вы столкнулись.

Проверьте, есть ли в вашем приложении другие модели с длинным именем /verbose_name, и попробуйте их сократить. Это должно решить проблему. (Store совсем не кажется длинным, но, возможно, вы не упомянули другую модель.)

Кстати, причина, по которой вы не видели этого с SQLite, заключается в том, что, если я правильно помню, SQLite не применяет ограничения длины для полей char.

person nitwit    schedule 05.08.2013