Navicat 16 不支持直接导出整库或表结构为 Markdown;必须先用“数据库快照”导出 HTML,再用 pandoc 转换,最后手动补全字段类型(如从 title 属性提取 TINYINT(1)),因“复制为 Markdown 表格”仅适用于查询结果,不包含表注释、索引、主键及 title 中的真实类型信息。

Navicat 16 不支持直接导出整库或表结构为 Markdown,所谓“快速导出”必须绕过 GUI 限制,用组合方案实现:先用 数据库快照 导出 HTML,再用 pandoc 转换,最后手动补字段类型——这是目前唯一稳定、可复现的路径。
MySQL 数据库管理技能,能够通过自然语言查询和管理数据库,支持 SELECT/INSERT/UPDATE/DELETE、表管理、备份恢复等操作。当用户提及 MySQL、数据库查询、建表或数据备份时使用此技能。
为什么不能右键“复制为 Markdown 表格”来导出结构
这个功能只对查询结果生效,且需你手动执行 SELECT * FROM information_schema.columns 等语句后全选 → 右键 → 复制。它不包含表名、表注释、索引、主键标识,也不保留字段的 title 属性(比如真实类型 TINYINT(1) 藏在 <td title="TINYINT(1)">VARCHAR</td> 里),导出即丢信息。
用“数据库快照”导出 HTML 是最稳的起点
Navicat 的 数据库快照(文件 → 导出向导 → 格式选 HTML)生成的 HTML 结构规整:每张表一个 <table>,字段名、类型、注释、是否为空、默认值、键类型都分列呈现,且关键元数据藏在 <code>title 属性中。比导出 SQL 或 CSV 更利于后续解析。
- 务必勾选“包含对象定义”和“包含详细信息”,否则字段注释和类型描述会缺失
- 导出前确认数据库连接使用的是 MySQL 5.7+,低版本可能漏
COLUMN_COMMENT - 中文注释含
&、等字符时,HTML 源码会是 <code>&、,不预处理会导致 <code>pandoc解析失败
pandoc 转换必须加 --wrap=none 且过滤 title
pandoc 默认不提取 title 属性,而 Navicat 的真实字段类型(如 DATETIME、JSON)全靠它承载。直接跑 pandoc -f html -t markdown input.html 会把所有类型降级成 VARCHAR 或空。
- 基础命令要带:
pandoc -f html -t markdown --wrap=none --columns=200 input.html -o output.md -
--wrap=none防止长字段注释被硬换行截断(比如 500 字的COLUMN_COMMENT) - 若需保留
title内容,得换方案:用 Python +BeautifulSoup遍历每个<td>,优先取 <code>td.get('title'),无则 fallback 到文本字段类型丢失必须手动或脚本修复
Navicat 导出的 HTML 中,“数据类型”列显示的是简化名(如全写
VARCHAR),但真实类型在title里:<td title="TINYINT(1)">VARCHAR</td>。没人写脚本提取,转换后就是错的。- 轻量修复脚本核心逻辑:
for td in soup.find_all('td'): if td.get('title'): td.string = td.get('title') - 别依赖在线转换器或
markdown-it,它们不解析 HTML 属性,只会把整个<table> 渲染成一团乱码<li>如果只要单表文档,其实用 <code>SHOW CREATE TABLE+ 正则提取字段更准,但批量就不现实
真正卡住进度的从来不是工具链长度,而是字段类型从
title到 Markdown 的那一层映射——它不会自动发生,必须显式处理,否则导出来的文档看着整齐,一查字段就错。 - 轻量修复脚本核心逻辑:

















