如何将我的数据库中的所有表更改为UTF8字符集?

时间:2010-01-27 21:08:21

标签: mysql utf-8 collation alter

我的数据库不是UTF8,我想将所有表格转换为UTF8,我该怎么做?

4 个答案:

答案 0 :(得分:39)

对于单人桌,您可以这样做:

ALTER TABLE tab CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;

对于整个数据库,我不知道与此类似的其他方法:

http://www.commandlinefu.com/commands/view/1575/convert-all-mysql-tables-and-fields-to-utf8

答案 1 :(得分:14)

mysqldump --user=username --password=password --default-character-set=latin1 --skip-set-charset dbname > dump.sql
sed -r 's/latin1/utf8/g' dump.sql > dump_utf.sql
mysql --user=username --password=password --execute="DROP DATABASE dbname; CREATE DATABASE dbname CHARACTER SET utf8 COLLATE utf8_general_ci;"
mysql --user=username --password=password --default-character-set=utf8 dbname < dump_utf.sql

答案 2 :(得分:9)

my_database_name替换为您的数据库名称

SELECT CONCAT('ALTER TABLE ', TABLE_NAME, ' CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;')
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'my_database_name' AND TABLE_TYPE != 'VIEW';

这将构建许多可以运行的查询

答案 3 :(得分:0)

更好的是,使用Percona的工具套件。由于密钥长度存在问题,我会先审核您的索引,然后再更新为utf8mb4。

SELECT CONCAT('pt-online-schema-change --alter "CONVERT TO CHARACTER SET utf8 
COLLATE utf8_unicode_ci" t=', TABLE_NAME, ',D=DB_NAME,u=USER_NAME --statistics --execute') 
FROM information_schema.TABLES 
WHERE TABLE_SCHEMA = 'DB_NAME' AND TABLE_TYPE != 'VIEW' AND TABLE_COLLATION NOT LIKE '%utf8%';