Явно задайте механизм хранения таблицы MySQL с помощью South и Django
У меня возникает проблема, что Юг создает таблицу DB для новой модели как INNODB, когда я переношу, но создает таблицу как MYISAM, когда другой разработчик запускает собственную миграцию.
Проблема заключается в том, что все мои другие таблицы являются MYISAM, поэтому использование новых таблиц приводит к многочисленным ошибкам ограничения внешнего ключа.
Как я могу явно убедиться, что таблица создана с помощью MYISAM?
Что может быть причиной создания таблицы с использованием другого механизма хранения в разных средах?
Ответы
Ответ 1
Чтобы убедиться, что все миграции всегда выполняются с использованием INNODB, вы должны установить механизм хранения как INNODB в определении базы данных напрямую, например:
DATABASES = {
'default': {
...
'OPTIONS' : { 'init_command' : 'SET storage_engine=INNODB', },
}
Если вы используете MySQL 5.7.x и выше,
DATABASES = {
'default': {
...
'OPTIONS' : { 'init_command' : 'SET default_storage_engine=INNODB', },
}
Но вы должны знать, что он может иметь производительность. Таким образом, вы можете установить этот параметр только при выполнении миграции.
Ответ 2
Если вы используете Юг, вы можете установить STORAGE_ENGINE.
django < 1.2
# add to your settings file
DATABASE_STORAGE_ENGINE = 'INNODB' # django < 1.2
django >= 1.2
# add to your settings file
DATABASES = {
'default': {
...
'STORAGE_ENGINE': 'INNODB'
}
}