desc 是 describe 的缩写,功能完全相同,均用于查看表结构;但不显示注释、字符集等完整信息,需用 show full columns 或 information_schema.columns 获取。

DESC 和 DESCRIBE 是同一个命令
MySQL 里 DESC 就是 DESCRIBE 的缩写,不是两个不同功能的命令,执行效果完全一致。你敲 DESC table_name 或 DESCRIBE table_name,返回的都是字段名、类型、是否允许 NULL、键信息、默认值和额外属性这些列。
常见错误现象:有人以为 DESC 是“降序排序”,在查询语句里误写成 SELECT * FROM t ORDER BY id DESC; 后,又单独敲 DESC t;,结果发现没报错但输出了表结构——其实是触发了表描述命令,不是排序相关。
想看更全的字段信息,用 SHOW COLUMNS 或 SHOW FULL COLUMNS
DESC 返回的信息比较精简,比如不显示字段注释(COMMENT)、字符集、排序规则,也不区分 TINYINT(1) 是布尔逻辑还是数值用途。这时候得换命令:
-
SHOW COLUMNS FROM table_name:比DESC多一列Comment,但依然不显示字符集 -
SHOW FULL COLUMNS FROM table_name:真正完整,包含Collation、Privileges、Comment,还能看出字段是否由生成列表达式定义(Extra列会写STORED GENERATED或VIRTUAL GENERATED)
使用场景:建表时加了 COMMENT '用户昵称',或者用了 utf8mb4_0900_as_cs 排序规则,DESC 完全看不到这些信息。
information_schema.columns 是唯一能跨库查字段元数据的方式
如果要查别的数据库里的表结构,或者写脚本批量分析多个表,DESC 和 SHOW 都受限于当前 USE db_name 的上下文,没法直接指定库名前缀。这时必须查系统表:
SELECT column_name, data_type, is_nullable, column_default, extra, column_comment FROM information_schema.columns WHERE table_schema = 'your_db' AND table_name = 'your_table' ORDER BY ordinal_position;
注意点:
-
table_schema是数据库名,不是当前连接的库;漏写会导致查不到 -
column_comment是真正的字段注释,SHOW FULL COLUMNS里叫Comment,但值一样 - 性能影响:
information_schema查询在大库上可能稍慢,尤其 MySQL 8.0 之前,因为它是实时拼的视图
DESC 不支持通配符或模糊匹配,别指望它当搜索工具
有人试过 DESC user% 或 DESC users.*,结果全是语法错误。MySQL 的 DESC 只接受一个确切存在的表名(可以带库前缀,如 DESC mydb.users),不支持正则、通配、模式匹配。
替代方案:
- 查有哪些表含关键词:
SHOW TABLES LIKE '%user%'; - 查哪些字段含关键词(需先知道库和表):
SELECT column_name FROM information_schema.columns WHERE table_schema='db' AND table_name='t' AND column_name LIKE '%name%';
容易踩的坑:在 Navicat 或 DBeaver 这类工具里点开表结构,看到的是 GUI 封装后的结果,底层未必调的 DESC,所以复制 SQL 时要注意实际发的是什么语句。
字段信息这事,看着简单,但真要靠 DESC 搞清楚默认值是不是 NULL、有没有 ON UPDATE CURRENT_TIMESTAMP、字符集是否一致,就得切到 SHOW FULL COLUMNS 或 information_schema —— 前者快,后者准,别混着用还觉得结果矛盾。










