You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL 5.7+PHP:更新JSON字段时如何移除空值键?

解决MySQL 5.7 JSON类型移除空值键的问题

嘿,这个场景我太熟悉了!MySQL的JSON_SET只会帮你设置或覆盖键值对,哪怕值是空字符串也会保留键,要移除空值键得用专门的JSON函数来处理,给你两种实用的方案:

方案1:直接移除指定键(已知要删除的键时)

如果你明确知道要删掉B这个键,直接用JSON_REMOVE函数就行,它会精准删除JSON对象里的指定路径:

UPDATE car 
SET attributes = JSON_REMOVE(attributes, '$.B');

执行这条语句后,你的attributes字段就会变成{ "A": "Audi", "C": "Cadillac" },完全符合你的需求。

方案2:动态判断(根据值是否为空决定是更新还是删除)

如果你的业务是:当要设置的B值为空字符串时就移除键,否则就更新值,那可以用CASE语句结合两个JSON函数来实现:

假设你要传入的新B值存在变量@new_b_value里,SQL可以这么写:

UPDATE car 
SET attributes = CASE 
    WHEN @new_b_value = '' THEN JSON_REMOVE(attributes, '$.B')
    ELSE JSON_SET(attributes, '$.B', @new_b_value)
END
WHERE id = 1; -- 替换成你的筛选条件,比如指定某条记录

为什么JSON_SET做不到?

因为JSON_SET的设计逻辑是设置或覆盖键值,空字符串''是合法的JSON值,所以它会把B键的值设为空,而不会删除整个键。只有JSON_REMOVE才会彻底移除对应的键。

内容的提问来源于stack exchange,提问作者Peter Karlsson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:38:01