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

如何在MariaDB的REPLACE语句中处理JSON编码字符串

MariaDB JSON字符串替换失效的解决办法

可行的UPDATE语句

直接使用实际字符或者正确的转义格式,避免过度转义:

方法1:使用实际UTF-8字符

UPDATE MY_TABLE
SET MY_COL = REPLACE(MY_COL, '{"libelle": "comédien"}', '{"libelle": "acteur"}')
WHERE MY_COL LIKE '%{"libelle": "comédien"}%';

方法2:使用MariaDB兼容的Unicode转义

如果客户端输入é有问题,用单层转义的Unicode序列:

UPDATE MY_TABLE
SET MY_COL = REPLACE(MY_COL, '{"libelle": "com\\u00e9dien"}', '{"libelle": "acteur"}')
WHERE MY_COL LIKE '%{"libelle": "com\\u00e9dien"}%';

为啥之前的UPDATE不生效?

  1. LIKE和REPLACE的转义逻辑不同:你之前SELECT里的com\\u00e9dien是因为LIKE需要把\转义成\\才能让数据库识别为单个反斜杠,匹配存储的\u00e9序列。但REPLACE操作列数据时,不需要额外加一层转义——过度转义后,你要替换的字符串变成了com\u00e9dien,和列中实际的comédien(真实的é字符)不匹配,自然替换失败。
  2. 字符串字面量测试的特殊性:你单独用字符串测试时,两边的转义会被同步解析,所以能匹配替换,但这和列中存储的真实数据逻辑不一致,不能直接套用到UPDATE里。

更稳妥的方案:用JSON函数操作

既然存储的是JSON格式,直接用MariaDB的JSON函数更靠谱,不用纠结转义:

UPDATE MY_TABLE
SET MY_COL = JSON_SET(MY_COL, '$.libelle', 'acteur')
WHERE JSON_EXTRACT(MY_COL, '$.libelle') = 'comédien';

这个方法直接定位JSON的libelle键,修改其值,完全规避字符串转义的问题。

内容的提问来源于stack exchange,提问作者8oris

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 08:57:43