JSON_MERGE_PATCH 具有空值(在 Javascript 中)

JSON_MERGE_PATCH with null values (in Javascript)

如文档中所写,JSON_MERGE_PATCH 将删除设置为 null 的每个值,以下示例将从我的设置中删除 header 值 json场

const data = JSON.stringify({header: null, otherdata: ...})
await connection.query(UPDATE shops SET JSON_MERGE_PATCH(settings, ?), data)

但是如果我想将值设置为空怎么办,如果我用引号将 header: 'null' 括起来,您可以猜到: 它以字符串形式输入 'null'进入我的数据库。

有谁知道是否可以 mysql 将我的 json 字段更新为空值?

由于似乎没有针对此问题的纯粹 MySQL 解决方案,您最好在 JavaScript 中实现它。

你可以这样实现:

  1. 获取所有要修改某些ID的记录
  2. 使用类似How can I merge properties of two JavaScript objects dynamically?的解决方案来合并对象
  3. 用新值更新所有记录

另一种方法是对您拥有的每个对象键使用 JSON_SET

UPDATE shops SET JSON_SET(settings, '$.header', null)
-- Then repeat for each json key you want to modify