MySQL 在 Linux 下預設區分大小寫(lower_case_table_names=0)。本文提供預存程序,批次將指定資料庫下所有資料表名稱轉為大寫。
lower_case_table_names=0(區分大小寫)ALTER、SELECT 權限於 information_schemaDROP PROCEDURE IF EXISTS uppercase;
CREATE PROCEDURE uppercase(IN dbname VARCHAR(200))
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE oldname VARCHAR(200);
DECLARE cur CURSOR FOR
SELECT table_name FROM information_schema.TABLES
WHERE table_schema = dbname;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN cur;
REPEAT
FETCH cur INTO oldname;
SET @newname = UPPER(oldname);
SET @isNotSame = @newname <> BINARY oldname;
IF NOT done AND @isNotSame THEN
-- 先改為小寫暫存名稱避免衝突
SET @SQL = CONCAT('RENAME TABLE `', oldname, '` TO `', LOWER(@newname), '_tmp`');
PREPARE tmpstmt FROM @SQL;
EXECUTE tmpstmt;
-- 再改為目標大寫名稱
SET @SQL = CONCAT('RENAME TABLE `', LOWER(@newname), '_tmp` TO `', @newname, '`');
PREPARE tmpstmt FROM @SQL;
EXECUTE tmpstmt;
DEALLOCATE PREPARE tmpstmt;
END IF;
UNTIL done END REPEAT;
CLOSE cur;
END;
CALL uppercase('你的資料庫名稱');
information_schema.TABLES 取得所有表名UPPER(name) 與原名(BINARY 區分大小寫)RENAME 避免大小寫不敏感系統下衝突PREPARE/EXECUTE)執行 DDL