navicat结构比对不读取partition子句,因其仅查询information_schema.columns等常规视图,忽略information_schema.partitions,导致分区差异无法识别;必须手动执行select partition_name, partition_method, partition_expression from information_schema.partitions验证。
navicat 结构比对根本没读取 partition 子句
navicat 的结构比对逻辑只解析 show create table 输出中的字段、索引、外键等常规对象,但会跳过整个 partition by 及后续的 partition 定义块。它不把分区当作“结构的一部分”,而是当成一种“运行时行为”或“存储引擎特性”。所以即使源库和目标库分区数量差 10 个,比对结果也显示“无差异”。
对比报告里看不到分区信息,不是漏显示,是压根没采集
你点开 DDL 比较标签,左右两边的 CREATE TABLE 语句里都缺 PARTITION 部分——这不是渲染问题,是 Navicat 在拉取元数据阶段就主动丢弃了。它调用的是类似 SELECT * FROM INFORMATION_SCHEMA.COLUMNS 这类标准视图,而分区定义只存在于 INFORMATION_SCHEMA.PARTITIONS,这个表 Navicat 不查。
别信“表已分区”图标,得手动查元数据验证
Navicat 表列表旁显示的“小齿轮”或“分区图标”,只是根据表名后缀或历史缓存猜测的,不可靠。真正验证分区是否存在且一致,必须在目标库执行:
SELECT PARTITION_NAME, PARTITION_METHOD, PARTITION_EXPRESSION FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_SCHEMA = 'your_db' AND TABLE_NAME = 'table_name';
- 结果为空 → 分区根本没建
- 行数比源库少 → 边界值(如
VALUES LESS THAN)写错或缺失MAXVALUE -
PARTITION_EXPRESSION不一致(如YEAR(created_at)vsTO_DAYS(created_at))→ 分区逻辑已偏移
云数据库上分区失效,比对更不可信
阿里云 RDS、腾讯云 CDB 等平台默认禁用分区功能,需进控制台单独开通。即使你在目标库执行了带 PARTITION BY 的 CREATE TABLE,MySQL 实际建出来仍是普通表,而 Navicat 完全不会报错或警告。这种静默降级,会让结构比对彻底失去意义。











