首页 文章

使用South和Django显式设置MySQL表存储引擎

提问于
浏览
20

我遇到了一个问题,当我迁移时,南方为新模型创建了一个新表模型作为INNODB,但当另一个开发人员运行自己的迁移时,将该表创建为MYISAM .

这个问题是我的所有其他表都是MYISAM,因此使用新表会导致许多外键约束错误 .

如何明确确保使用MYISAM创建表?

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

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', },
        }
    

    但你应该知道它可以有performance hit . 因此,您可能只想在运行迁移时设置此选项 .

  • 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'
       }
    }
    

相关问题