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;