20

移行時に South が新しいモデルの DB テーブルを INNODB として作成するが、別の開発者が独自の移行を実行するとテーブルを MYISAM として作成するという問題が発生しています。

これに関する問題は、他のすべてのテーブルが MYISAM であるため、新しいテーブルを使用すると多くの外部キー制約エラーが発生することです。

テーブルが MYISAM を使用して作成されていることを明示的に確認するにはどうすればよいですか?

異なる環境で異なるストレージ エンジンを使用してテーブルが作成される原因は何ですか?

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を設定できます。

ジャンゴ < 1.2

# add to your settings file
DATABASE_STORAGE_ENGINE = 'INNODB' # django < 1.2

ジャンゴ >= 1.2

# add to your settings file
DATABASES = {
   'default': {
       ...
       'STORAGE_ENGINE': 'INNODB'
   }
}
于 2011-08-26T01:55:22.823 に答える