0

我有一个迁移,我正在将 MySQL 表的字符集从 latin1 更改为 utf-8。在那之后,我试图以某种方式改变对象。如果对象无法保存以回滚数据库,包括字符集更改,我希望这样。这是我的代码:

def up
  execute "ALTER TABLE posts CONVERT TO CHARACTER SET utf-8;"
  posts = Post.find_each do |post|
    # modify post.content
    post.save!
  end
  raise "rollback"
end 

我这样做是raise "rollback"因为我想测试并确保迁移成功。但是,如果我show create table posts在迁移回滚后执行操作,我会看到它的字符集仍然是 utf-8。执行语句是否未包含在事务中?

4

1 回答 1

3

alter table在 mysql 中执行隐式提交。您不能回滚alter.

于 2013-01-10T18:29:38.907 回答