如果列使用默认表字符集,那么每个表只需要一个查询来进行转换:
ALTER TABLE t CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
如果字符集在每列上单独设置,那么AFAIK就没有办法在MySql中直接在数据库中的所有表的所有列上执行此操作,但是您可以使用所选择的语言编写一个小程序.
您的程序将查询INFORMATION_SCHEMA.COLUMNS表并查看CHARACTER_SET_NAME列:
SELECT * FROM `INFORMATION_SCHEMA.COLUMNS`
WHERE TABLE_SCHEMA = 'dbname' AND CHARACTER_SET_NAME = 'latin1'
对于每个结果行,在现场更改字符集和排序规则的情况下合成和执行ALTER TABLE查询很简单:
ALTER TABLE t MODIFY col TEXT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
在上述查询t中,col和TEXT将是INFORMATION_SCHEMA.COLUMNS结果集中的TABLE_NAME,COLUMN_NAME和DATA_TYPE列的值.