2015-11-25 71 views
0

这里是我的查询:如何遍历结果集并执行每条语句? (MySQL的)

SELECT CONCAT('ALTER TABLE `', TABLE_NAME,'` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;') AS mySQL 
FROM INFORMATION_SCHEMA.TABLES; 

我想改变每个VARCHAR和表从整个数据库的字符集和校对,但结果从这组仅仅是巨大的。我如何迭代这个查询并在SQL语言中执行每个结果?

+2

编写一个存储过程并执行语句作为准备语句。 –

回答

2

如果我这样做,我会将此SELECT语句的输出保存到文件类型为.sql的文件中。

然后我会用文本编辑器编辑.sql文件,以确保它包含我所希望的。

然后我会使用MySQL客户端程序来运行SQL文件。

注意事项well查询中写入的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') 

此查询使用数据库名称限定表名。它也只选择当前数据库中的表格。最后,它排除了三个系统数据库,因为尝试更改这些数据库中的表是一个非常糟糕的主意。