mysql - 搜索 MySQL 中的哪些表包含带有空 ENUM 的行

标签 mysql enums phpmyadmin

我们正在清理 MySQL 数据库,并发现许多在 ENUM 列中包含空字符串(作为值)的行。 MySQL 有忽略此类错误的坏习惯,你知道。

因此,由于我们有数百张表,我想知道是否有办法找到哪些表存在此问题。欢迎涉及查询、过程或 phpMyAdmin 命令的解决方案。

提前致谢!

附注我的第一个问题在这里!耶!

最佳答案

因此,按照评论中的建议,我编写了一个程序,用空字符串而不是 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();

关于mysql - 搜索 MySQL 中的哪些表包含带有空 ENUM 的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21030191/

相关文章:

mysql - Docker 镜像无法在 Live 上构建,但在 Dev 上正常

python - 如何选择和删除数据库的第一行?

java - 迭代枚举,保存类,然后初始化类并将它们放入映射中

java - JPA 映射一个映射,其中键是一个枚举

导出表时 phpmyadmin "Error in processing request"- 错误代码 500

mysql - 用于搜索和替换(需要更新)整个数据库的 SQL 查询(如果与 phpMyAdmin/MySQL - WordPress 站点中的字符串匹配)

mysql - #2006 - MySQL 服务器消失了

mysql - Concrete5 共享身份验证

c - 如何在C中定义枚举类型(enum)?

mysql - If 语句并选择一行