Navicat 数据页签支持点击列标题切换升序/降序/取消排序,仅影响当前视图与分页,不修改数据;多列或复杂排序须使用 SQL 页签手动编写 ORDER BY 语句。

点击列标题直接切换排序方向
Navicat 的数据查看界面(即打开表后的「数据」页签)支持原生列头排序,无需右键或额外弹窗。鼠标单击某列的标题栏,会立即按该列升序排列;再点一次,切换为降序;第三次点击则取消排序(恢复原始插入顺序)。这个操作只影响当前视图,不修改表结构或数据。
- 仅对当前已加载的数据页生效(默认每页 1000 行),翻页后需重新点击列头
- 若列含
NULL值,Navicat 默认把NULL当作最小值(升序时排最前),行为与 MySQLORDER BY一致 - 不支持多列组合排序(比如先按
status升序、再按created_at降序),多次点击只会作用于最后一次点击的列
用 SQL 模式实现稳定多列排序
当需要精确控制排序逻辑(例如多字段、NULLS FIRST、表达式排序),必须切到「SQL」页签手动写 SELECT。Navicat 的「数据」页签底层不生成可编辑的 SQL,所以无法通过界面保存复杂排序规则。
- 在「SQL」页签中输入类似:
SELECT * FROM users ORDER BY status ASC, created_at DESC
- 执行后结果集是只读的,但可复制、导出,且排序逻辑完全由 SQL 决定,不受分页干扰
- 注意:如果表名或列名含空格或特殊字符,需用反引号包裹,如
`user name`
排序后导出/复制仍保持顺序
在「数据」页签排序后,直接 Ctrl+C 复制选中行,或使用「导出向导」,粘贴/生成的文件内容会保留当前视图的顺序——前提是没勾选「导出时忽略当前排序」(该选项在导出向导的「高级」设置里,默认不启用)。
- 导出为 Excel 或 CSV 时,确认导出设置中「导出当前页」或「导出全部」的选择符合预期
- 若复制整页数据(Ctrl+A → Ctrl+C),实际复制的是当前页已排序后的行,不是原始物理顺序
- 对大表慎用全表导出+排序:Navicat 会先把所有数据拉到本地内存再排序,可能卡顿或 OOM
为什么右键菜单里没有“排序”选项?
Navicat 自 15 版本起移除了数据网格右键中的「Sort Ascending/Descending」菜单项,官方理由是避免与列头点击功能重复。如果你在旧版教程里看到该选项,升级后就找不到了——这不是权限问题,也不是配置遗漏,就是 UI 精简了。
- 替代方案只有两种:点列头(快但单一),或写 SQL(准但要动手)
- 插件或自定义工具栏也无法恢复该右键功能,Navicat 未提供对应命令 ID
- 若依赖批量列排序(比如想同时对 5 列设不同方向),只能靠 SQL 模式 + 临时视图或 CTE 拆解
排序本身不难,难的是意识到 Navicat 的「数据」页签只是个轻量查看器,真要可控、可复现、可交接的排序逻辑,终究得回到 SQL 语句里去写清楚。


















