You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

MySQL中如何更新Blob字段内的指定JSON属性值?

解决MySQL中Blob字段内JSON内容的更新问题

嘿,咱们先说说你给出的那个UPDATE语句——它是不能实现需求的。你写的set protocolBlob='%"alg":"null"%'会直接把整个protocolBlob字段的值替换成%"alg":"null"%这个字符串,而不是替换原有内容里的指定子串,这显然不是你想要的结果。

下面给你两种靠谱的解决方案,根据你的MySQL版本来选:

方案一:适用于所有MySQL版本(字符串替换法)

因为你的Blob字段里存的是JSON格式的字符串,我们可以利用字符串替换来实现修改。通过CAST把Blob转成字符类型,用REPLACE替换目标内容后再存回去:

UPDATE ApplicationEntity
SET protocolBlob = REPLACE(CAST(protocolBlob AS CHAR), '"alg":"None"', '"alg":"null"')
WHERE protocolBlob LIKE '%"alg":"None"%';

说明:

  • CAST(protocolBlob AS CHAR):将Blob类型的字段转换为可操作的字符串
  • REPLACE(...):精准替换"alg":"None""alg":"null"
  • WHERE条件:确保只更新包含目标内容的记录,避免无意义的更新

方案二:适用于MySQL 8.0及以上(JSON函数法,更精准)

如果你的MySQL版本是8.0或更高,推荐用原生JSON函数来操作,这样能避免字符串替换可能带来的误匹配(比如其他字段恰巧包含相同的子串):

UPDATE ApplicationEntity
SET protocolBlob = CAST(
    JSON_REPLACE(
        CAST(protocolBlob AS JSON),
        '$[0].alg',
        NULL
    ) AS BLOB
)
WHERE JSON_EXTRACT(CAST(protocolBlob AS JSON), '$[0].alg') = 'None';

说明:

  1. CAST(protocolBlob AS JSON):把Blob转成JSON类型,方便用JSON函数操作
  2. JSON_REPLACE('$[0].alg', NULL):定位到JSON数组的第一个元素($[0])的alg字段,将其值改为NULL(数据库会自动序列化为JSON格式的"null"
  3. CAST(... AS BLOB):把修改后的JSON转回Blob类型存回字段
  4. WHERE条件:用JSON_EXTRACT精准判断alg字段的值是否为None,确保只更新符合条件的记录

重要提醒

在执行UPDATE操作前,一定要先备份数据,或者在测试环境验证语句的正确性,避免误操作导致数据丢失。

内容的提问来源于stack exchange,提问作者John Doe

火山引擎 最新活动