2016-08-10 2 views
1

У нас есть приложение Django с помощью MariaDB 10. При попытке запустить юнит-тесты, например, так: ./manage.py test myappДжанго: Операционная ошибка во время работы блок тестирует

здание тестовой базы данных не может со следующей ошибкой:

django.db.utils.OperationalError: (1709, 'Index column size too large. The maximum column size is 767 bytes.') 

Я уже знаю, что набор символов (utf8) и сверка (utf8_general_ci) на (200) поля VARCHAR то, что вызывает ошибку.

Я попытался удалить все файлы миграции для затронутого приложения и повторно запустить их, но это не устранило проблему. (Я новичок в python и Django, и в то время это казалось хорошей идеей ...)

Мой вопрос: как я могу исправить/пропустить эту ошибку (и любые подобные ошибки, которые могут возникнуть в дальнейшем в процессе), поэтому я могу завершить сборку тестовой базы данных?

+0

Вы пытались уменьшить длину поля? Я не эксперт по MySQL, но я понимаю, что максимальная длина для индексирования столбцов может быть в некоторых случаях 191 символом. Однако это для utf8mb4, и вы говорите, что используете utf8, так что это может быть не проблема в вашем случае. – Alasdair

+0

Пожалуйста, покажите нам 'SHOW CREATE TABLE' и сообщите нам, какой индекс вы пытаетесь добавить. –

+0

'VARCHAR (200) CHARACTER SET utf8' не приведет к этой ошибке _by_ сам_. –

ответ

0

При создании базы данных, убедитесь, что использовать SET utf8 COLLATE utf8_bin

CREATE DATABASE mydatabase CHARACTER SET utf8 COLLATE utf8_bin 

Для запуска теста: в вашей БД конфигурации добавить

'TEST_CHARSET': 'utf8', 
'TEST_COLLATION': 'utf8_general_ci', 

Если это не работает: изменять конфигурационные файлы

#/etc/mysql/mariadb.conf.d/50-client.cnf 
default-character-set = utf8 

#/etc/mysql/mariadb.conf.d/50-mysql-clients.cnf 
default-character-set = utf8 

... и перезапустить базу данных.

Смежные вопросы