Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 为数据库中的每个表执行一条语句_Mysql - Fatal编程技术网

Mysql 为数据库中的每个表执行一条语句

Mysql 为数据库中的每个表执行一条语句,mysql,Mysql,我知道这个查询用于更改mysql表的字符集和排序规则 alter table <some_table> convert to character set utf8 collate utf8_unicode_ci; alter table转换为字符集utf8 collate utf8\u unicode\u ci; 但是我需要一个查询来更改数据库中的所有表。是否有任何可能的解决方案。我编写了这个过程来为数据库中的每个表执行语句: DROP PROCEDURE IF EXISTS s

我知道这个查询用于更改mysql表的字符集和排序规则

alter table <some_table> convert to character set utf8 collate utf8_unicode_ci;
alter table转换为字符集utf8 collate utf8\u unicode\u ci;

但是我需要一个查询来更改数据库中的所有表。是否有任何可能的解决方案。

我编写了这个过程来为数据库中的每个表执行语句:

DROP PROCEDURE IF EXISTS sp_forEveryTable;
DELIMITER $$
CREATE PROCEDURE sp_forEveryTable(IN p_schema varchar(50), IN p_stmt varchar(100))
BEGIN

  DECLARE done INT DEFAULT FALSE;
  DECLARE v_tbl varchar(50);
  DECLARE cur CURSOR FOR SELECT table_name FROM information_schema.tables WHERE table_schema = p_schema;
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

  OPEN cur;

  read_loop: LOOP
    FETCH cur INTO v_tbl;
    IF done THEN
      LEAVE read_loop;
    END IF;

    SET @sql := REPLACE(p_stmt, '?', v_tbl);

    IF (UPPER(p_stmt) LIKE 'SELECT %') THEN
        SET @sql := CONCAT('SELECT "', v_tbl, '", ', SUBSTRING(@sql FROM 7));
    ELSE 
        SELECT v_tbl AS 'Execute statement for following table:';
    END IF;

    PREPARE stmt FROM @sql;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
  END LOOP;

  CLOSE cur;
END $$
DELIMITER ;
像这样使用它:

CALL sp_forEveryTable('your_database_name', 'ALTER TABLE ? CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci');
要使将来在此数据库中创建的表具有utf8字符集和排序规则作为默认值,请使用本文档中给出的语句