DESCRIBE table_name 是 MySQL 查看表结构最轻量方案,不依赖权限或系统表;PostgreSQL 需查 information_schema.columns;SQL Server 推荐用 sys.columns;导出字段名应避免 IDE 的“Copy as CSV”,改用 GROUP_CONCAT 或 STRING_AGG 拼接。
MySQL 用 DESCRIBE 或 SHOW COLUMNS 最直接
想一眼看清表里有哪些字段、类型、是否允许 null、有没有默认值,describe table_name 是最轻量的方案。它不依赖额外权限,也不需要查系统表,连 information_schema 都不用碰。
常见错误是输错表名或忘了加数据库名前缀(跨库时)。如果提示 Table 'xxx' doesn't exist,先确认当前 USE 的库是否对得上,或者改用 DESCRIBE db_name.table_name。
-
DESCRIBE和SHOW COLUMNS FROM功能几乎一样,后者稍显冗长但语义更明确 - 字段顺序就是建表时定义的顺序,和
SELECT *返回列序一致 - 如果字段有注释(
COMMENT),SHOW FULL COLUMNS FROM才会显示,普通DESCRIBE不显示
PostgreSQL 必须走 information_schema.columns
PostgreSQL 没有 DESCRIBE 这种快捷命令,得手动查系统视图。最稳的方式是用标准 SQL:SELECT column_name, data_type, is_nullable, column_default FROM information_schema.columns WHERE table_name = 'your_table' ORDER BY ordinal_position。
容易踩的坑是大小写——PostgreSQL 默认把未加引号的表名转成小写,所以 WHERE table_name = 'MyTable' 会查不到,得写成 'mytable' 或者用双引号 "MyTable"(但引号方式不推荐,易出错)。
- 别用
\d table_name(psql 元命令)——它输出带格式、含索引/约束等额外信息,不方便复制字段名列表 - 如果只要字段名一行逗号分隔,可追加
STRING_AGG(column_name, ', ')聚合,避免手动拼接 -
information_schema视图跨版本兼容性好,比查pg_attribute更安全
SQL Server 用 sp_help 太啰嗦,改用 sys.columns
sp_help table_name 会打出一堆无关信息(约束、索引、统计信息),真正要的字段列表埋在中间,复制起来费劲。直接查系统视图更干净:SELECT c.name, t.name AS type, c.max_length, c.is_nullable FROM sys.columns c JOIN sys.types t ON c.user_type_id = t.user_type_id WHERE c.object_id = OBJECT_ID('your_table') ORDER BY c.column_id。
注意 OBJECT_ID() 返回 NULL 时整个查询没结果——说明表不存在,或没权限,或名字拼错了(比如漏了 schema,默认是 dbo,但如果你的表在 sales schema 下,就得写 OBJECT_ID('sales.your_table'))。
-
sys.columns中的max_length对 varchar 是字节数,对 nvarchar 是字符数,别直接当长度限制理解 - 想导出纯字段名列表?加个
SELECT STRING_AGG(name, ', ') FROM sys.columns...就行,SQL Server 2017+ 支持 - 旧版 SQL Server(2016 及以前)不支持
STRING_AGG,得用FOR XML PATH('')曲线救国
导出为文本时,别信 IDE 的“复制为 CSV”功能
很多数据库客户端(DBeaver、Navicat、甚至 MySQL Workbench)右键结果集有“Copy as CSV”,但它常把字段名和数据混在一起,或自动加引号/换行符,粘贴到 Excel 或脚本里反而要二次清洗。
真正省事的做法:用纯 SELECT 拼接字段名,例如 MySQL:SELECT GROUP_CONCAT(COLUMN_NAME) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='t' AND TABLE_SCHEMA='db';PostgreSQL:SELECT STRING_AGG(column_name, ', ') FROM information_schema.columns...。这样出来就是一行干净字符串,Ctrl+C 直接可用。
- 如果字段名含空格或特殊字符(比如
user id),GROUP_CONCAT或STRING_AGG不会自动加反引号或双引号——你得自己套一层CONCAT('`', column_name, '`') - 字段太多时,
GROUP_CONCAT可能被截断(默认 1024 字符),执行前先设SET SESSION group_concat_max_len = 1000000 - 别忽略排序:没
ORDER BY ordinal_position或ORDER BY column_id,字段顺序可能乱


















