First variant
SELECT CONCAT(GROUP_CONCAT(
CONCAT('(SELECT \'',COLUMN_NAME,'\' AS `column`, MAX(CHAR_LENGTH(`',COLUMN_NAME,'`)) AS `max_length`, MIN(CHAR_LENGTH(`',COLUMN_NAME,'`)) AS `min_length` ',
'FROM `',TABLE_SCHEMA,'`.`',TABLE_NAME, '`)')
SEPARATOR ' UNION ALL '), ';') AS sql_query
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'DB_NAME' AND TABLE_NAME = 'TABLE_NAME';
Change DB_NAME and TABLE_NAME
see diff lenght vs char_length
Second variant
SET @db_Name = 'DB';
SET @tb_name = 'table';
SET @sql = NULL;
SELECT
GROUP_CONCAT(
CONCAT('MAX(CHAR_LENGTH(', COLUMN_NAME, ')) AS `', COLUMN_NAME, '`')
) INTO @sql
FROM information_schema.columns
WHERE TABLE_NAME = @tb_name AND
TABLE_SCHEMA = @db_Name
order by ORDINAL_POSITION asc;
SET @sql = CONCAT('SELECT ',@sql, 'FROM ', @tb_name);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
increase the limit of GROUP_CONCAT()
The longest string returned by GROUP_CONCAT() is 1024 by default. Because of that you need to increase this limit.
SET group_concat_max_len = 1024;