常用 SQL 转义符一览表
字符 | 转义方法 | 示例 | 适用场景 | 数据库差异说明 |
---|---|---|---|---|
单引号 ' |
'' (双单引号)或 CHR(39) |
'It''s a test' |
字符串内包含单引号 | 通用(MySQL、SQL Server、Oracle等) |
双引号 " |
"" (双引号)或 CHR(34) |
SELECT "column""name" FROM "table" |
包含空格/保留字的字段名或表名 | 主要用于 Oracle、PostgreSQL |
反斜杠 \ |
\\ (双反斜杠)或 CHR(92) |
'C:\\Program Files\\' |
路径、正则表达式中的转义 | MySQL、PostgreSQL(需配置参数) |
百分号 % |
\% (反斜杠转义)或 CHR(37) |
LIKE '100\%' ESCAPE '\' |
LIKE 模糊查询中匹配百分号本身 | 通用(需配合 ESCAPE 关键字) |
下划线 _ |
\_ (反斜杠转义)或 CHR(95) |
LIKE 'foo\_bar' ESCAPE '\' |
LIKE 模糊查询中匹配下划线本身 | 通用 |
美元符号 $ |
$$ (双美元符号)或 CHR(36) |
'$${variable}$$' |
字符串内保留 ${} 结构 |
PostgreSQL、TDSQL-PG |
方括号 [ ] |
[[]] (双左/右括号)或 CHR(91)/CHR(93) |
SELECT [column[name]] FROM [table] |
SQL Server 中字段名包含特殊字符 | SQL Server 特有 |
换行符 | \n (反斜杠转义)或 CHR(10) |
'Line1\nLine2' |
字符串内换行 | MySQL、PostgreSQL |
制表符 | \t (反斜杠转义)或 CHR(9) |
'Name\tAge' |
字符串内制表符 | MySQL、PostgreSQL |
& 符号 & |
CHR(38) |
'AT&T' → `'AT' |
CHR(38) |
补充说明
-
CHR()
函数的优势• 通过 ASCII 码直接生成字符,完全避免符号被解析为语法元素(如
CHR(36)
生成$
)。• 适用于动态 SQL 拼接或需硬编码特殊字符的场景。
-
数据库差异处理
• MySQL:默认用反斜杠转义,字段名可用反引号包裹(如
order
)。• PostgreSQL:支持
$$
符号包裹字符串(如$$${projectName}$$
)。• SQL Server:优先使用方括号转义字段名(如
[user-table]
)。 -
最佳实践
• 参数化查询:优先使用预编译语句(如
WHERE name = ?
),避免手动转义和 SQL 注入风险。• 统一转义策略:根据数据库类型选择标准方法,避免混用符号。
注释
• 符号 CHR(n)
需结合具体数据库函数使用(如 PostgreSQL 的 CHR(36)
,Oracle 的 CHR(38)
)。
• 部分数据库(如 Oracle)需配置会话参数(如 SET DEFINE OFF
)以禁用 &
符号的变量绑定功能。