如何在MySQL命令行中获取数据表列的全部属性(含注释等)

MySQL查看完整列属性的方法
MySQL数据列共包含13项属性:
- Field(字段名)
- Type(数据类型)
- Length(字段长度)
- Unsigned(无符号)
- Zerofill(零填充)
- Binary(二进制)
- Allow Null(允许空值)
- Key(索引类型)
- Default(默认值)
- Extra(额外属性)
- Encoding(字符编码)
- Collation(排序规则)
- Comment(字段注释)
可视化MySQL客户端可以直接展示全部属性,但终端命令行中执行desc <tbl_name>仅能返回部分属性,示例返回如下:
mysql> desc user; +----------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------+--------------+------+-----+---------+----------------+ | id | int unsigned | NO | PRI | NULL | auto_increment | | name | varchar(20) | NO | MUL | | | | nickname | varchar(50) | YES | UNI | NULL | | | age | tinyint | YES | | NULL | | +----------+--------------+------+-----+---------+----------------+ 4 rows in set (0.00 sec)
desc命令不会返回Zerofill、Binary、Encoding、Collation、Comment属性,要查看这些缺失属性,可以用以下三种命令:
1. SHOW FULL COLUMNS 命令
这是最简便的查询方式,语法:
SHOW FULL COLUMNS FROM <表名>;
相比desc,这个命令的返回结果会额外包含Collation、Privileges、Comment三列:
- Zerofill、Binary属性会直接显示在
Type列的字段类型后缀中 - 字符编码可以通过
Collation值的前缀判断,比如utf8mb4_general_ci对应的编码就是utf8mb4
示例返回:
mysql> SHOW FULL COLUMNS FROM user; +----------+------------------------+--------------------+------+-----+---------+----------------+---------------------------------+----------+ | Field | Type | Collation | Null | Key | Default | Extra | Privileges | Comment | +----------+------------------------+--------------------+------+-----+---------+----------------+---------------------------------+----------+ | id | int unsigned zerofill | NULL | NO | PRI | NULL | auto_increment | select,insert,update,references | 用户ID | | name | varchar(20) binary | utf8_bin | NO | MUL | | | select,insert,update,references | 用户名 | | nickname | varchar(50) | utf8mb4_general_ci | YES | UNI | NULL | | select,insert,update,references | 用户昵称 | | age | tinyint | NULL | YES | | NULL | | select,insert,update,references | 用户年龄 | +----------+------------------------+--------------------+------+-----+---------+----------------+---------------------------------+----------+
2. 查询 information_schema.COLUMNS 系统表
如果需要将所有属性拆分为独立列返回、精准获取每个字段的参数,可以直接查询MySQL内置的元数据系统表,示例语法:
SELECT COLUMN_NAME AS `Field`, COLUMN_TYPE AS `Type`, CHARACTER_MAXIMUM_LENGTH AS `Length`, IF(COLUMN_TYPE LIKE '%unsigned%', 'YES', 'NO') AS `Unsigned`, IF(COLUMN_TYPE LIKE '%zerofill%', 'YES', 'NO') AS `Zerofill`, IF(COLLATION_NAME LIKE '%_bin' OR COLUMN_TYPE LIKE '%binary%', 'YES', 'NO') AS `Binary`, IS_NULLABLE AS `Allow Null`, COLUMN_KEY AS `Key`, COLUMN_DEFAULT AS `Default`, EXTRA AS `Extra`, CHARACTER_SET_NAME AS `Encoding`, COLLATION_NAME AS `Collation`, COLUMN_COMMENT AS `Comment` FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() -- 替换为指定库名可跨库查询 AND TABLE_NAME = 'user'; -- 替换为目标表名
执行后会直接返回全部13项列属性,不需要从Type字段中解析参数,适合批量导出表结构的场景。
3. SHOW CREATE TABLE 命令
如果需要直观查看字段的完整定义,可以执行以下命令查看建表语句:
SHOW CREATE TABLE <表名>\G
末尾加\G会将结果垂直排版,避免字段过多时折行混乱。返回结果中会完整展示每个字段的所有属性,包括零填充、二进制、字符集、排序规则、注释等全部配置,示例:
mysql> SHOW CREATE TABLE user\G *************************** 1. row *************************** Table: user Create Table: CREATE TABLE `user` ( `id` int unsigned zerofill NOT NULL AUTO_INCREMENT COMMENT '用户ID', `name` varchar(20) binary NOT NULL COMMENT '用户名', `nickname` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '用户昵称', `age` tinyint DEFAULT NULL COMMENT '用户年龄', PRIMARY KEY (`id`), UNIQUE KEY `nickname` (`nickname`), KEY `name` (`name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci 1 row in set (0.00 sec)
内容的提问来源于stack exchange,提问作者Willis
相关产品推荐
相关产品推荐

