我在一些 MariaDB 列中有这个字符串(我们称之为 MY_COL):
{"libelle": "com\u00e9dien"}
我想用它替换它
{"libelle": "acteur"}
使用这篇STO帖子,我弄清楚了如何选择包含此字符串的行:
SELECT MY_COL
FROM MY_TABLE
WHERE MY_COL LIKE '%{"libelle": "com\\\\u00e9dien%'
但是,当我在 UPDATE 语句中使用这种“超大转义”技术时,它不起作用
UPDATE MY_TABLE
SET MY_COL = REPLACE(MY_COL, '{"libelle": "com\\\\\\u00e9dien"', '{"libelle": "acteur"')
尽管如此,我注意到这个 SELECT 语句运行良好:
SELECT '{"libelle": "com\\\\\\u00e9dien"' As `Column_Before`,
REPLACE('{"libelle": "com\\\\\\u00e9dien"', '{"libelle": "com\\\\\\u00e9dien"', '{"libelle": "acteur"') As `Column_After`;
似乎在 REPLACE 语句中引用 Column_Name 会导致此问题,但我既不知道原因,也不找到如何防止这种情况......
最后信息:表、列和数据库使用 UTF8MB4 编码和 utf8mb4_general_ci 排序规则。
backslash \
是 JSON
和 SQL
字符串中的转义字符,因此必须对其进行转义,试试这个>>
方法一:
UPDATE MY_TABLE
SET MY_COL = REPLACE(MY_COL, '{"libelle": "com\\\\u00e9dien"', '{"libelle": "acteur"');
方法二:
UPDATE MY_TABLE
SET MY_COL = JSON_REPLACE(MY_COL, '$.libelle', 'acteur')
WHERE JSON_UNQUOTE(JSON_EXTRACT(MY_COL, '$.libelle')) = 'comédien';
方法三:
更新我的_表
SET MY_COL = REPLACE(MY_COL, '{"libelle": "com\\\\u00e9dien"}', '{"libelle": "acteur"}')
WHERE MY_COL LIKE '%com\\\\u00e9dien%';
方法4:
UPDATE MY_TABLE
SET MY_COL = REPLACE(MY_COL, 'comédien', 'acteur')
WHERE MY_COL LIKE '%comédien%';