这个问题是关于现有表格。更改了数据库的默认值。
Stack Overflow上的大多数问题似乎都假设您要更改字符集和排序规则 - 例如从latin1_general_ci到utf8_spanish_ci。答案通常建议:
ALTER TABLE <table_name> CONVERT TO CHARACTER SET utf8 COLLATE utf8_spanish_ci;
当字符集不变时,这似乎是一种浪费 - 只需要更新排序规则 - 但是MySQL可能足够聪明,因此它发现字符集是相同的,没有浪费资源?
问题变成:如果只有整理正在改变,那么为现有表(及其列)更新它的建议程序是什么?
答案 0 :(得分:1)
我认为答案是:
对于每个表,请执行
ALTER TABLE <table_name> COLLATE utf8_spanish_ci;
对于每列,请执行
ALTER TABLE <table_name> MODIFY <column_name> <column_type> COLLATE utf8_spanish_ci;
您可以使用information_schema数据库生成要运行的SQL - 仅用于所需的表
SELECT concat('ALTER TABLE `', TABLE_SCHEMA, '`.`', table_name, '` COLLATE utf8_spanish_ci;')
from information_schema.tables
where TABLE_SCHEMA like 'database_name' and TABLE_COLLATION = 'utf8_general_ci';
和列
SELECT concat('ALTER TABLE `', TABLE_SCHEMA, '`.`', table_name, '` MODIFY `', column_name, '` ', COLUMN_TYPE, ' COLLATE utf8_spanish_ci;')
from information_schema.columns
where TABLE_SCHEMA like 'database_name' and COLLATION_NAME = 'utf8_general_ci';