0
我們正在清理我們的MySQL數據庫,並在ENUM列空字符串(如值)發現許多排又一排。你知道,MySQL具有忽略這種錯誤的惡習。搜索這在MySQL表與空枚舉
因此,由於我們有數百個表,我想知道是否有辦法找到哪些表有這個問題。涉及查詢,程序或phpMyAdmin命令的解決方案是受歡迎的。
在此先感謝!
P.S.我的第一個問題!好極了!
我們正在清理我們的MySQL數據庫,並在ENUM列空字符串(如值)發現許多排又一排。你知道,MySQL具有忽略這種錯誤的惡習。搜索這在MySQL表與空枚舉
因此,由於我們有數百個表,我想知道是否有辦法找到哪些表有這個問題。涉及查詢,程序或phpMyAdmin命令的解決方案是受歡迎的。
在此先感謝!
P.S.我的第一個問題!好極了!
所以,下面的意見建議,我做了一個打印表名,列名和空字符串,而不是一個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();
您是指ENUM列中的空字符串或ENUM值之一爲空字符串的行嗎? –
你應該能夠使腳本使用'mysqldump'轉儲模式(E),尋找與ENUM列的表,然後'SELECT COUNT(1)FROM schema.table WHERE table.enumcol =「」'這甚至會給你一個表格中每個字段有多少空條目的列表。 – DopeGhoti
也許不要使用ENUM! – Strawberry