搜索MySQL中的哪些表具有空的ENUM行

时间:2014-01-09 20:12:41

标签: mysql enums phpmyadmin

我们正在清理我们的MySQL数据库并在ENUM列中找到许多带有空字符串(作为值)的行。你知道,MySQL有一种忽视这种错误的恶习。

所以,既然我们有数百个表,我想知道是否有办法找到哪些表有这个问题。欢迎使用涉及查询,过程或phpMyAdmin命令的解决方案。

提前致谢!

P.S。我的第一个问题在这!耶!

1 个答案:

答案 0 :(得分:0)

因此,根据评论中的建议,我创建了一个过程,用于打印表名,列名和空字符串而不是ENUM值的行数。

它适用于mysql终端应用程序,但不适用于phpMyAdmin。

USE __DATABASE_NAME_HERE__;   

DELIMITER //

DROP PROCEDURE IF EXISTS hunt //
CREATE PROCEDURE hunt()
BEGIN
    DECLARE done INT DEFAULT false;
    DECLARE current_table_name VARCHAR(255);
    DECLARE current_column_name VARCHAR(255);

    DECLARE my_cursor CURSOR FOR
        SELECT table_name, column_name
        FROM information_schema.columns
        WHERE information_schema.columns.table_schema = "__DATABASE_NAME_HERE__" AND information_schema.columns.column_type LIKE "%ENUM%";

    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

    OPEN my_cursor;
        my_loop: LOOP
            FETCH my_cursor INTO current_table_name, current_column_name;
            IF done THEN
                LEAVE my_loop;
            END IF;

            SET @sql = CONCAT(
                ' SELECT COUNT(*) as column_count, "', current_table_name, '" AS table_name, "', current_column_name, '" AS column_name',
                ' FROM ', current_table_name,
                ' WHERE `', current_column_name , '` = ""',
                ' HAVING column_count > 0'
            );
            PREPARE stmt FROM @sql;
            EXECUTE stmt;
            DROP PREPARE stmt;
        END LOOP;
    CLOSE my_cursor;

END //
DELIMITER ;

CALL hunt();