DBeaver本身不提供行级数据内容对比,仅支持数据库对象结构差异比对;其Compare Database Objects功能只读取元数据(如表定义、列类型、约束、索引等),不查询实际数据行,因此无法显示“哪些字段值被修改”,该能力仅企业版通过Data Compare实现。

直接说结论:DBeaver 本身不提供“两版数据”的行级内容对比(比如某张表修改前 vs 修改后),它做的是**数据库对象结构差异比对**,不是数据快照比对。如果你想找的是“改了哪些字段值”,得换工具或加步骤。
为什么 DBeaver 的 Compare Database Objects 不显示数据变更
DBeaver 的 Compare Database Objects 功能定位非常明确:只比对元数据(schema-level),包括表定义、列类型、约束、索引、视图、存储过程等。它读取的是 INFORMATION_SCHEMA 或各数据库的系统表,不查实际数据行。
- 你右键点一张表 →
Compare→Simple Structure Compare,它比的是这张表“长什么样”,不是“里面填了什么” - 即使两张表结构完全一致,但数据差十万八千里,DBeaver 也会显示“无差异”
- 这个行为由
CompareObjectsExecutor类控制,逻辑上就跳过SELECT * FROM ...这类操作
想看数据差异?得用 Data Compare(企业版专属)
社区版用户会发现菜单里压根没有 Data Compare 选项——它只在企业版(Enterprise Edition)中提供,且需额外启用插件。
- 路径是:
Database→Compare→Compare Data(非灰色才可用) - 它要求源和目标表名、主键/唯一键一致,然后逐行比对内容,支持生成 INSERT/UPDATE/DELETE 同步脚本
- 社区版用户强行启用该功能会报错:
Feature not available in Community Edition - 替代方案:用 SQL 手写
EXCEPT或LEFT JOIN查差集,或导出 CSV 用diff命令行比对
结构变更后怎么确认“改对了”?推荐三步验证法
很多用户以为比完结构就完事了,结果上线才发现字段类型没生效、默认值丢了、索引没建上。关键在验证环节:
- 比对前先手动执行一次
Refresh metadata(右键数据库 →Synchronize),避免 DBeaver 缓存旧结构 - 生成同步脚本后,**别直接 Execute** —— 先点
Preview看 SQL 是否符合预期,尤其注意ALTER TABLE ... MODIFY COLUMN在 MySQL 和 PostgreSQL 语法差异 - 执行后立刻在目标库运行:
SELECT column_name, data_type, is_nullable FROM information_schema.columns WHERE table_name = 'your_table',和源库结果人工核对
最容易被忽略的一点:DBeaver 的结构比较默认开启 Skip system objects,但某些业务库会把自定义字典表放在 pg_catalog 或 mysql 模式下——这种情况下必须关掉该选项,否则这些表会被静默跳过。











