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