Navicat 自15版起彻底移除XML导出功能,唯一可靠方案是使用mysqldump --xml命令;其生成的XML为MySQL自定义格式,含结构,需注意字符转义、时区、base64编码等兼容性问题。
Navicat 不支持直接导出 XML 格式
navicat 从 15 版本起已完全移除 xml 导出功能,所有“导出向导”中均无 xml 选项。这不是设置遗漏或界面隐藏,而是官方明确放弃支持——export wizard 里选不到、右键菜单里没有、导出配置里也找不到对应格式。试图在旧版 navicat(如 12)中找 xml 选项,大概率是因为记混了 mysql 命令行工具 mysqldump 的 --xml 参数。
替代方案:用命令行 mysqldump 生成标准 XML
真正能导出符合 W3C 规范的 XML 的,是 MySQL 自带的 mysqldump 工具。Navicat 只负责连接和可视化,数据序列化必须交给底层命令行。
- 确保本地已安装 MySQL 客户端(含
mysqldump),路径通常在/usr/local/mysql/bin/mysqldump(macOS)或C:\Program Files\MySQL\MySQL Server X.X\bin\mysqldump.exe(Windows) - 执行命令时必须显式指定
--xml,且不能和其他导出格式参数(如--tab或--csv)共存 - 导出单表最稳妥:
mysqldump --xml -u root -p database_name table_name > output.xml - 若需包含建表语句,加
--no-create-info可跳过 DDL;默认会把CREATE TABLE和数据混合进 XML,部分解析器会报错
导出后 XML 的结构与兼容性风险
mysqldump 生成的 XML 是 MySQL 自定义格式,不是通用的 RSS 或 Atom,根节点为 <mysqldump></mysqldump>,每行数据包装在 <row></row> 内,字段用 <field name="xxx"></field> 表示。这种结构被 Python 的 xml.etree.ElementTree 或 Java 的 DocumentBuilder 能读,但很多前端 XML 解析库(比如某些 jQuery 插件)会因命名空间或嵌套层级报错。
- 中文字段值默认不转义,若字段含
、<code>&等字符,XML 会直接损坏——必须加--xml --skip-extended-insert并手动过滤或预处理数据 - 时间类型(
DATETIME、TIMESTAMP)输出为字符串,但格式依赖服务器时区,导出前建议先执行SET time_zone = '+00:00'; - 大字段(
TEXT、BLOB)会被 base64 编码,且包裹在<field xsi:type="base64Binary"></field>中,解析时需额外判断xsi:type
如果非得用 Navicat,只能曲线救国
Navicat 能导出的最接近 XML 的格式是 CSV 或 JSON,再用脚本转换。但要注意:Export to JSON 在 Navicat Premium 16+ 才支持,且只支持单表、无 schema 元信息;Export to CSV 则需勾选 Export with column names,否则字段对齐容易错位。
- JSON 导出后,可用 Python 快速转 XML(用
dicttoxml库),但嵌套关系丢失,所有字段扁平化为同级<item></item> - CSV 导出时禁用
Quote character会导致含逗号的字段撕裂,务必保留双引号包裹 - 不要依赖 Navicat 的“复制为 XML”快捷菜单项——那只是把当前结果集以 XML 样式渲染到剪贴板,不包含根节点、无声明头,粘贴到编辑器里根本不是合法 XML
<field name="content"></field> 里塞了未转义的 HTML 片段。这种问题不会在 Navicat 界面里暴露,得等你拿去跑自动化脚本时才崩。











