我遇到了一个问题,South 在我迁移时为新模型创建数据库表为 INNODB,但在另一个开发人员运行自己的迁移时创建表为 MISAM。
问题在于我所有的其他表都是 MISAM,因此使用新表会导致许多外键约束错误。
如何明确确保表是使用 MISAM 创建的?
什么可能导致在不同环境中使用不同的存储引擎创建表?
我遇到了一个问题,South 在我迁移时为新模型创建数据库表为 INNODB,但在另一个开发人员运行自己的迁移时创建表为 MISAM。
问题在于我所有的其他表都是 MISAM,因此使用新表会导致许多外键约束错误。
如何明确确保表是使用 MISAM 创建的?
什么可能导致在不同环境中使用不同的存储引擎创建表?
为确保所有迁移始终使用 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', },
}
但是您应该知道它可能会影响性能。因此,您可能只想在运行迁移时设置此选项。
如果您使用 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'
}
}