SQL max/min length for all columns

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;

Добавить комментарий

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.