Navicat 17 的分区功能仅为 SQL 生成器,仅通过“选项”选项卡底部的“分区”按钮打开配置对话框,不提供可视化管理界面,也不支持分区状态查看或后续维护操作。
navicat 17 不提供独立的「表分区可视化管理界面」,所谓“在设计表的各个选项卡中配置分区方案”这个说法容易误导——实际操作中,分区配置只存在于「选项」选项卡底部的一个按钮里,不是分散在多个选项卡中。
「选项」选项卡里没有「分区」设置项,只有「分区」按钮
- 点击表 → 「设计表」→ 切换到底部的
选项选项卡 - 页面最下方会出现一个灰色的
分区按钮(不是复选框、不是下拉菜单、不是输入框) - 必须点击它,才会弹出真正的分区配置对话框;不点,就看不到任何分区字段、表达式或分区数量的输入入口
- 这个按钮在某些 MySQL 版本(如 5.7 或未启用
partitioning插件的实例)上会置灰不可用,此时需先确认服务端支持
分区类型选择受 MySQL 服务端版本严格限制
-
RANGE、LIST、HASH、KEY四类可用性取决于 MySQL 版本与是否启用分区引擎 - MySQL 8.0.29+ 默认禁用分区功能,需手动在配置文件中添加
loose-partition=ON并重启服务 - Navicat 不会校验或提示该限制,只会静默禁用
分区按钮或保存时抛出 SQL 错误:ERROR 1064 (42000): This partition function is not allowed -
COMPOSITE(子分区)在 Navicat 17 中不提供图形化支持,必须手写CREATE TABLE ... PARTITION BY RANGE (...) SUBPARTITION BY HASH
分区表达式必须是确定性函数,且字段必须是索引前缀
- 例如想按
created_at字段做RANGE COLUMNS分区,该字段必须出现在某联合索引的最左侧位置 - 使用
YEAR(created_at)或TO_DAYS(created_at)是允许的,但NOW()、UUID()、CONNECTION_ID()等非确定性函数会直接导致保存失败 - Navicat 不校验表达式合法性,错误只在执行 DDL 时暴露为:
ERROR 1486 (HY000): Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
保存分区配置 = 执行 ALTER TABLE … PARTITION BY,会锁表并可能失败
- 即使只是给空表加分区,Navicat 也会生成完整
ALTER TABLE ... PARTITION BY语句并提交 - 对于大表,该操作会触发全表重建(MySQL 5.7)或至少元数据锁升级(MySQL 8.0),期间写入阻塞
- 若中途断开、磁盘满、或分区定义冲突(如已有数据超出首个
RANGE上限),不会回滚,表可能进入「损坏但可读」状态 - 建议先导出原表结构,再在测试库验证分区语句,最后在生产环境用命令行分步执行:先
CREATE TABLE new_table ... PARTITION BY,再INSERT INTO ... SELECT,最后原子替换
真正容易被忽略的点是:Navicat 的分区功能本质是「SQL 语句生成器」,不是「分区生命周期管理器」。它不显示当前分区状态、不支持 REORGANIZE PARTITION 或 TRUNCATE PARTITION 的图形化操作,后续维护仍需直连执行 SQL。


















