「COLUMNS」

COLUMNS,该表提供了表中列的信息。

INFORMATION_SCHEMA NameSHOW NameRemarks说明
TABLE_SCHEMA  所在的数据库的库名
TABLE_NAME  所在的表的表名
TABLE_CATALOG def该列的值总是def
PRIVILEGESPrivilegesMySQL extension权限(SELECT)
ORDINAL_POSITION see notes列在表中的顺序
NUMERIC_SCALEType 小数点后的位数
NUMERIC_PRECISIONType 数字值的精度
IS_NULLABLENull 是否可以为空
GENERATION_EXPRESSION MySQL extension生成列时使用的表达式。GENERATION_EXPRESSION对于生成的列是非空的,并显示出用于用于计算列值的表达式
EXTRAExtraMySQL extension附加数据(比如:auto_increment)
DATETIME_PRECISIONType 日期精度
DATA_TYPEType 数据类型(TINYINT、INT、TIMESTAMP)
COLUMN_TYPETypeMySQL extension列的类型(比如:`tinyint(3) unsigned’、`int(10) unsigned’)
COLUMN_NAMEField 列名
COLUMN_KEYKeyMySQL extensionKEY的类型(比如:PRI,主键约束;UNI,唯一约束;MUL,可以重复的KEY。)
COLUMN_DEFAULTDefault 列的默认值
COLUMN_COMMENTCommentMySQL extension列注释
COLLATION_NAMECollation 排序规则
CHARACTER_SET_NAME  字符集名称
CHARACTER_OCTET_LENGTH  字符八进制长度
CHARACTER_MAXIMUM_LENGTHType 字符最大长度(比如:32、64)

以下的两个语句是等价的:

SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULT
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = ‘tbl_name’
[AND table_schema = ‘db_name’]
[AND column_name LIKE ‘wild’]

SHOW COLUMNS
FROM tbl_name
[FROM db_name]
[LIKE ‘wild’]

注意事项

在SHOW Name列中TYPE,表示在SHOW语句输出的TYPE列的值 = INFORMATION_SCHEMA Name中几个不同列的值的组合;
ORDINAL_POSITION是必要的,因为有时可能需要执行ORDER BY ORDINAL_POSITION来排序。SELECT时,列的顺序是没有自动排序的,这点与与SHOW不同;
CHARACTER_OCTET_LENGTH应与CHARACTER_MAXIMUM_LENGTH相同,但多字节字符集除外;
CHARACTER_SET_NAME可以从Collation中派生。例如,如果执行SHOW FULL COLUMNS FROM t,并且在Collat​​ion列中看到为latin1_swedish_ci的值,则该字符集是第一个下划线之前的内容,即latin1。
GENERATION_EXPRESSION对于生成的列是非空的,它的值为用于计算列值的表达式。有关生成列的信息,请参见MySQL文档中第13.1.18.8节“创建表和生成的列”。
EXTRA列包含生成列的VIRTUAL GENERATEDVIRTUAL STORED

参考文献

The INFORMATION_SCHEMA COLUMNS Table
请问字段的NumericScale属性和Precision属性到底是指什么?
What is the point of the TABLE_CATALOG column in INFORMATION_SCHEMA.TABLES?