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

问题描述 投票:0回答:1

我在一些 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 排序规则。

sql mysql utf-8 character-encoding
1个回答
0
投票

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%';
© www.soinside.com 2019 - 2024. All rights reserved.