替换 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]")' 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
我正在尝试 运行 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]")' 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