mysql获取每个表的每个字段的长度

SELECT 
    TABLE_SCHEMA,
    TABLE_NAME,
    COLUMN_NAME,
    DATA_TYPE,
    (
        CASE 
            WHEN DATA_TYPE IN ('tinyint') THEN 1
            WHEN DATA_TYPE IN ('smallint') THEN 2
            WHEN DATA_TYPE IN ('mediumint') THEN 3
            WHEN DATA_TYPE IN ('int') THEN 4
            WHEN DATA_TYPE IN ('bigint') THEN 8
            WHEN DATA_TYPE IN ('float') THEN 4
            WHEN DATA_TYPE IN ('double') THEN 8
            WHEN DATA_TYPE = 'decimal' THEN NUMERIC_PRECISION + NUMERIC_SCALE
            WHEN DATA_TYPE IN ('char', 'varchar', 'binary', 'varbinary') THEN 
                IF(DATA_TYPE IN ('char', 'binary'), CHARACTER_MAXIMUM_LENGTH, 
                   CHARACTER_MAXIMUM_LENGTH * 4 + IF(CHARACTER_MAXIMUM_LENGTH <= 255, 1, 2)) -- 对于字符串类型,假设UTF-8编码,实际长度需根据字符集确定
            WHEN DATA_TYPE IN ('date', 'time') THEN 3
            WHEN DATA_TYPE IN ('datetime', 'timestamp') THEN 5 + IFNULL(DATETIME_PRECISION, 0)
            WHEN DATA_TYPE = 'year' THEN 1
            ELSE '未知'
        END
    ) AS APPROX_FIELD_SIZE
FROM 
    INFORMATION_SCHEMA.COLUMNS
WHERE 
    TABLE_SCHEMA NOT IN ('information_schema', 'performance_schema')   -- 排除系统表
		AND TABLE_NAME = 'your_table_name' -- 需要查询的表名
ORDER BY 
    TABLE_SCHEMA,
    TABLE_NAME,
    COLUMN_NAME;

  

posted @ 2024-04-17 15:43  Amireux-126  阅读(151)  评论(0)    收藏  举报