Navicat 16 不支持可视化管理 MariaDB 系统版本化表,因其 SYSTEM VERSIONING 是内核强制的 DDL 特性,依赖 WITH SYSTEM VERSIONING 语法启用,ROW_START/ROW_END 为隐藏列且不可手动编辑;所有操作必须通过原生 SQL 执行,GUI 不提供开关、筛选或历史查询封装。
navicat 16 不支持可视化管理 mariadb 的系统版本化表(system versioning),这不是功能缺失,而是设计使然——该特性由 mariadb 内核强制控制,无法通过 gui 配置。
为什么 Navicat 里找不到“启用版本控制”的开关
MariaDB 的系统版本控制依赖 DDL 语法(如 WITH SYSTEM VERSIONING),不是靠元数据标记或字段属性生效。
-
ROW_START和ROW_END是 MariaDB 自动生成的隐藏列,类型固定为BIGINT UNSIGNED,不可手动指定、不可修改、不显示在表结构视图中。 - Navicat 的「表设计」界面只暴露用户可配置项(如引擎、字符集),而版本控制属于存储层行为,不在其 GUI 映射范围内。
- 尝试在 Navicat 表设计器里添加或编辑这些字段会直接报错:
Unknown column 'ROW_START' in field list。
如何真正启用和查询系统版本表
必须用原生 SQL 操作,Navicat 支持执行但不提供封装:
- 新建带版本控制的表:
CREATE TABLE employees (<br> id INT PRIMARY KEY,<br> name VARCHAR(100),<br> salary DECIMAL(10,2)<br>) WITH SYSTEM VERSIONING;
- 给已有表添加版本控制:
ALTER TABLE employees ADD SYSTEM VERSIONING; - 查询历史快照(关键!不能用普通 WHERE):
SELECT *, ROW_START, ROW_END FROM employees FOR SYSTEM_TIME ALL;
或指定时间点:FOR SYSTEM_TIME AS OF TIMESTAMP '2024-01-01 00:00:00'
Navicat 中查看版本数据的实操限制
- 「数据查看器」能显示
ROW_START/ROW_END,但前提是显式写出列名——SELECT *默认不包含隐藏列。 - 「筛选」功能对版本字段完全无效:它们不参与常规条件过滤,
WHERE ROW_START > 123会报错或返回空。 - 「数据分析工具」按钮仅分析当前快照,不触发
FOR SYSTEM_TIME子句,本质是普通SELECT。 - 导出数据时若未手动加
FOR SYSTEM_TIME,导出的只是当前行,历史版本全丢失。
真正容易被忽略的是:版本控制一旦启用,就无法关闭(MariaDB 目前不支持 DROP SYSTEM VERSIONING),且所有写操作自动产生历史记录——这会显著增加磁盘占用和 I/O 开销,尤其在高频更新场景下。


















