Navicat同步时只选几个字段需在「表映射」页点击Map按钮,取消勾选不需同步的源字段(如password_hash),其自动进入Ignore columns列表;目标额外字段(如sync_time)可设为NOW()等常量;务必手动配对而非依赖自动匹配,避免错位写入。
同步时怎么只选几个字段,而不是整行?
navicat 的「数据同步」不支持在同步过程中动态丢弃字段——它默认按表结构映射,但你可以通过「字段映射」手动控制哪些源字段写入目标表、哪些忽略、哪些用常量或表达式替代。
- 进入同步向导的「表映射」页签,点击某张表右侧的
Map按钮 - 取消勾选你不想同步的源字段(比如
password_hash、temp_flag),它们会自动进入Ignore columns列表 - 若目标表有额外字段(如
sync_time),可在映射里设为常量:NOW()(MySQL)或CURRENT_TIMESTAMP(PostgreSQL) - 别依赖「Match fields by name」自动匹配——如果源表叫
user_name,目标叫full_name,自动连线会失败,必须手动拖拽或点选配对
为什么忽略字段后目标列还是被清空了?
Ignore columns 不是“不读”,而是“不比对也不写入”;但如果目标列定义为 NOT NULL 且没设默认值,Navicat 插入时就会因缺失值报错,或写入 NULL(取决于严格模式)。
- 确认目标列允许
NULL,或提前设好默认值(如DEFAULT 'N/A') - 如果想保留目标库原有值(比如
updated_at不被覆盖),必须把它加进Ignore columns,且确保该列没被其他映射规则意外覆盖 - 常见错误:源表
status被错误映射到目标表is_deleted,结果所有is_deleted被批量刷成active—— 这种错位几乎全是字段连线没核对清楚导致的
想把多个源字段合成一个 JSON 写进目标字段怎么办?
Navicat 本身不支持在映射里拼 JSON 字符串,但可以绕过:先在源库建视图,用 JSON_OBJECT()(MySQL)或 TO_JSONB()(PostgreSQL)预处理,再同步视图中的计算字段。
- MySQL 示例视图:
CREATE VIEW orders_summary AS SELECT id, JSON_OBJECT('amount', total, 'items', item_list) AS payload FROM orders - PostgreSQL 示例:
CREATE VIEW orders_summary AS SELECT id, TO_JSONB(ROW(total, item_list)) AS payload FROM orders - 同步时选这个视图而非原表,映射
payload到目标表的json_payload字段即可 - 注意:目标字段类型必须是
JSON(MySQL)或JSONB(PostgreSQL),否则后续解析会失败
同步后发现字段值错乱,比如时间写进金额列?
这基本是字段顺序或类型不匹配引发的底层写入错位,尤其发生在源目标表字段数不等、或 TEXT / VARCHAR 长度差异大时。
- 执行前务必用
DESCRIBE table_name(MySQL)或\d table_name(PostgreSQL)确认两边字段顺序、类型、长度完全一致 - 避免源表用
TINYINT存状态,目标用ENUM—— Navicat 不做类型转换,直接 cast 可能溢出或截断 - 中文、emoji 或特殊符号字段要检查字符集是否统一(推荐全用
utf8mb4),否则同步后显示为???或插入失败
TEXT 字段正在默默吞掉 65535 字节以外的内容。


















