mysql 生成修改列编码的语句

SELECT CONCAT('ALTER TABLE ', TABLE_SCHEMA,'.',TABLE_NAME, ' MODIFY COLUMN `',COLUMN_NAME,'` ',COLUMN_TYPE,' CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci', ' ', IF(IS_NULLABLE = 'NO', 'NOT NULL', 'NULL'), IF(ISNULL(COLUMN_DEFAULT), '', CONCAT(' DEFAULT \'', COLUMN_DEFAULT, '\'')), IF(ISNULL(COLUMN_COMMENT), '', CONCAT(' COMMENT \'', COLUMN_COMMENT, '\';'))) AS 修改字段编码格式语句
FROM information_schema.`COLUMNS`
WHERE TABLE_SCHEMA  NOT IN ('admindb', 'mysql', 'information_schema', 'performance_schema', 'sys')
    and COLLATION_NAME <> 'utf8mb4_general_ci'
    and COLLATION_NAME is not null                 -- 可以不用,上面'<>'的条件可以过滤空值
        and table_name not in (
            SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE ='VIEW'
        )
                
                

 

SELECT CONCAT('ALTER TABLE `', TABLE_SCHEMA, '`.`', TABLE_NAME, '` CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;') AS 修改表编码格式语句
FROM information_schema.`TABLES`
WHERE TABLE_SCHEMA IN (
    SELECT SCHEMA_NAME
    FROM information_schema.`SCHEMATA`
    WHERE DEFAULT_CHARACTER_SET_NAME = 'utf8mb4'
        AND SCHEMA_NAME NOT IN ('admindb', 'mysql', 'information_schema', 'performance_schema', 'sys'))
    AND TABLE_TYPE="BASE TABLE"
            and table_name not in (
            SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE ='VIEW'
        )
                

 

posted @ 2023-04-24 16:54  第一序列  阅读(8)  评论(0编辑  收藏  举报