这是我的疑问:
SELECT CONCAT('ALTER TABLE `', TABLE_NAME,'` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;') AS mySQL
FROM INFORMATION_SCHEMA.TABLES;
我想从整个数据库中更改每个varchar和table的charset和collation,但是结果集很大。如何迭代此查询并在SQL语言中执行每个结果?
答案 0 :(得分:2)
如果我这样做,我会将此SELECT
语句的输出保存到文件类型为.sql
的文件中。
然后我会用文本编辑器编辑.sql
文件,以确保它包含我希望的内容。
然后我会使用MySQL客户端程序来运行SQL文件。
注意您的查询编写的SQL数据定义语言命令无法正常工作。您的查询为系统中的每个表写入命令。您可能希望对一个数据库中的表执行此操作。
SELECT CONCAT('ALTER TABLE `',
TABLE_SCHEMA,
'``',
TABLE_NAME,
'` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;')
AS mySQL
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_SCHEMA NOT IN ('INFORMATION_SCHEMA', 'PERFORMANCE_SCHEMA', 'MYSQL')
此查询使用数据库名称限定表名。它还仅选择当前数据库中的表。最后,它排除了三个系统数据库,因为尝试更改这些数据库中的表是一个非常糟糕的主意。