20

我遇到了一个问题,South 在我迁移时为新模型创建数据库表为 INNODB,但在另一个开发人员运行自己的迁移时创建表为 MISAM。

问题在于我所有的其他表都是 MISAM,因此使用新表会导致许多外键约束错误。

如何明确确保表是使用 MISAM 创建的?

什么可能导致在不同环境中使用不同的存储引擎创建表?

4

2 回答 2

23

为确保所有迁移始终使用 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', },
    }

但是您应该知道它可能会影响性能。因此,您可能只想在运行迁移时设置此选项。

于 2011-03-11T07:17:55.153 回答
14

如果您使用 South,您可以设置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'
   }
}
于 2011-08-26T01:55:22.823 回答