我进行了一次迁移,将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。execute语句没有包装在事务中吗?
发布于 2013-01-11 02:29:39
alter table在mysql中执行implicit commit。您无法回滚alter。
https://stackoverflow.com/questions/14264767
复制相似问题