MySQL
MySQL
-- PATCH 语义:null 删除键、对象递归合并、非对象直接替换
SELECT JSON_MERGE_PATCH('{"a":1,"b":2}', '{"a":null,"c":3}');
-- {"b": 2, "c": 3}
-- PRESERVE 语义:数组连接、重复键都保留
SELECT JSON_MERGE_PRESERVE('{"a":[1,2]}', '{"a":[3]}');
-- {"a": [1, 2, 3]}PostgreSQL
PostgreSQL
-- || 合并:对象取并集、右侧覆盖同名键(浅层)
SELECT '{"a":1,"b":2}'::jsonb || '{"a":9,"c":3}'::jsonb;
-- {"a": 9, "b": 2, "c": 3}| JSON_MERGE_PATCH | RFC 7396:null 删键、递归合并;旧函数 JSON_MERGE 已废弃(8.0.3 起) |
|---|---|
| JSON_MERGE_PRESERVE | 数组拼接、保留重复键(旧版 JSON_MERGE 的等价物) |
| PostgreSQL || | 顶层浅合并,不是递归 patch 语义 |