题
我有一个由InnoDB桌制成的30GB MySQL DB。目前,表格集为:“ utf8_unicode_ci”,我想将其更改为“ utf8_general_ci”,最好的方法是什么?目前我要浏览每张桌子并运行 ALTER TABLE some_table CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
它永远需要...有更好的方法吗?
解决方案
我知道你的意思。 Alter表有时必须在使用时重建整个桌子。
假设Alter Table语句正在烦恼您,因为它花费了太长时间并且可以锁定表格,则可以使用2个工具将其作为“在线” Alter表。
如果来自Facebook https://www.facebook.com/notes/mysql-at-facebook/online-schema-change-change-for-mysql/430801045932
一个来自Openark http://openarkkit.googlecode.com/svn/trunk/openarkkit/doc/html/oak-online-alline-alter-table.html (仅MySQL 5.1+)
这两个工具基本上都创建了一个新表,将数据复制并通过更新新表格,并通过新的查询来保持更新,直到完成新表为止。这意味着您需要拥有可用的空间来进行此操作。
希望能帮助到你。
其他提示
您可以尝试:
- 取一个mysqldump w/ -e -no-no-recreate-info> source.sql
- 截断所有表
- 更改所有表
- 源源。SQL
与所有风险操作一样,请先在测试环境中执行以验证结果。当您“ source.sql”时,如果从MySQL提示符上字面运行,请不要忘记设置名称UTF8。如果插入mySQL,请运行mysql w/ -default-character-set = utf8,以避免您的终端设置中的charset怪异。