我遇到了一个问题,当我迁移时,南方为新模型创建了一个新表模型作为INNODB,但当另一个开发人员运行自己的迁移时,将该表创建为MYISAM .
这个问题是我的所有其他表都是MYISAM,因此使用新表会导致许多外键约束错误 .
如何明确确保使用MYISAM创建表?
是什么导致在不同环境中使用不同的存储引擎创建表?
为了确保所有迁移始终使用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 . 因此,您可能只想在运行迁移时设置此选项 .
如果使用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' } }
2 回答
为了确保所有迁移始终使用INNODB完成,您应该直接在数据库定义中将存储引擎设置为INNODB,如下所示:
如果您使用的是MySQL 5.7.x及更高版本,
但你应该知道它可以有performance hit . 因此,您可能只想在运行迁移时设置此选项 .
如果使用South,则可以设置STORAGE_ENGINE .
django < 1.2
django >= 1.2