替换 MariaDB 中包含方括号和引用实体的文本

Replace text containing brackets and quote entity in MariaDB

我正在尝试 运行 MariaDB 10.3 中的查询,它将在 SMF 中将 [google]" 替换为 [google]

UPDATE smf_messages SET body = REPLACE(body, '[google]"', '[google]') WHERE ID_BOARD = 64

这个查询对我来说对普通文本有用,但现在它给了我

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''[google]&quot)' at line 1

如果我的理解是正确的,那么您正在搜索转义字符

UPDATE smf_messages SET body = REPLACE(body, '\'[google]"', '\'[google]') WHERE ID_BOARD = 64

这会在括号前查找单引号,您需要简单地在要转义的字符前添加 \

这也有效,但是你的数据库有一些限制,在这种情况下,它是 safe_mode,你需要在 WHERE 子句中使用主键,在你的情况下,你可以使用 WHERE id in (SELECT id FROM smf_messages);

CREATE TABLE smf_messages  (id INTEGER auto_increment Primary key,
  body VARCHAR(250)
);
INSERT INTO smf_messages  (id,body) VALUES (0,'[b][google]"Präferenzzollsatz"[/google][i][google]"προτιμησιακό ποσοστό"[/google], [google]"προτιμησιακός δασμός"[/google] [i][/b]');
INSERT INTO smf_messages  (id,body) VALUES (0,'[google]"Präferenzzollsatz"[/google]');
✓

✓

✓
UPDATE smf_messages SET body = REPLACE(body, '[google]"', '[google]') WHERE id in (1,2,3);
UPDATE smf_messages SET body = REPLACE(body, '"[/google]', '[/google]') WHERE id in (1,2,3);
✓

✓
SELECT * FROM smf_messages;
id | body                                                                                                                                                               
-: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------
 1 | [b][google]Präferenzzollsatz[/google][i][google]προτιμησιακό ποσοστό[/google], [google]προτιμησιακός δασμός[/google] [i][/b]
 2 | [google]Präferenzzollsatz[/google]                                                                                                                                

db<>fiddle here