查询字符串中的转义字符

由于某些字符在查询字符串中作为操作符使用,必须对它们进行转义以防止查询错误或意外的匹配条件。

以下字符应使用反斜杠(\)进行转义:

!    "    $    '    (    )    -    /    <    @    \    ^    |    ~

在 MySQL 命令行客户端中

要转义单引号('),使用一个反斜杠:

SELECT * FROM your_index WHERE MATCH('l\'italiano');

对于前面提到的列表中的其他字符,它们是操作符或查询构造,必须被引擎视为普通字符,并在前面加上转义字符。 反斜杠本身也必须被转义,结果是两个反斜杠:

SELECT * FROM your_index WHERE MATCH('r\\&b | \\(official video\\)');

要将反斜杠作为字符使用,必须同时转义作为字符的反斜杠和作为转义操作符的反斜杠,这需要四个反斜杠:

SELECT * FROM your_index WHERE MATCH('\\\\ABC');

当您在 Manticore Search 中处理 JSON 数据并需要在 JSON 字符串中包含双引号(")时,重要的是要正确处理转义。在 JSON 中,字符串中的双引号使用反斜杠(\)转义。然而,当通过 SQL 查询插入 JSON 数据时,Manticore Search 将反斜杠(\)解释为字符串中的转义字符。

为了确保双引号正确插入到 JSON 数据中,您需要对反斜杠本身进行转义。这导致在双引号前使用两个反斜杠(\\)。例如:

insert into tbl(j) values('{"a": "\\"abc\\""}');

使用 MySQL 驱动程序

MySQL 驱动程序提供转义函数(例如 PHP 中的 mysqli_real_escape_string 或 Python 中的 conn.escape_string),但它们只转义特定字符。 您仍然需要为之前提到的列表中未被其各自函数转义的字符添加转义。 因为这些函数会为您转义反斜杠,所以您只需添加一个反斜杠。

这也适用于支持(客户端)预处理语句的驱动程序。例如,使用 PHP PDO 预处理语句时,您需要为 $ 字符添加一个反斜杠:

$statement = $ln_sph->prepare( "SELECT * FROM index WHERE MATCH(:match)");
$match = '\$manticore';
$statement->bindParam(':match',$match,PDO::PARAM_STR);
$results = $statement->execute();

这将导致最终查询为 SELECT * FROM index WHERE MATCH('\\$manticore');

在 HTTP JSON API 中

SQL 协议的相同规则适用,唯一的例外是对于 JSON,双引号必须用单个反斜杠转义,而其余字符需要双重转义。

当使用将数据结构转换为 JSON 字符串的 JSON 库或函数时,双引号和单个反斜杠会被这些函数自动转义,无需显式转义。

在客户端中

官方客户端 在底层使用各自编程语言中常见的 JSON 库/函数。之前提到的转义规则同样适用。

转义星号

星号(*)是一个独特的字符,具有两个用途:

  • 作为通配符前缀/后缀扩展符
  • 作为短语搜索中的任意词修饰符。

与其他作为操作符的特殊字符不同,当星号处于提供其功能的位置时,不能对其进行转义。

在非通配符查询中,无论是否在 charset_table 中,星号都不需要转义。

在通配符查询中,单词中间的星号不需要转义。作为通配符操作符(无论在单词开头还是结尾),星号始终被解释为通配符操作符,即使应用了转义。

在 SQL 中转义 JSON 节点名称

要转义 JSON 节点中的特殊字符,请使用反引号。例如:

MySQL [(none)]> select * from t where json.`a=b`=234;
+---------------------+-------------+------+
| id                  | json        | text |
+---------------------+-------------+------+
| 8215557549554925578 | {"a=b":234} |      |
+---------------------+-------------+------+

MySQL [(none)]> select * from t where json.`a:b`=123;
+---------------------+-------------+------+
| id                  | json        | text |
+---------------------+-------------+------+
| 8215557549554925577 | {"a:b":123} |      |
+---------------------+-------------+------+
Last modified: August 28, 2025