常用 SQL 转义符的总结
常用 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
)以禁用 &
符号的变量绑定功能。