SQL 字符串转义
转义用于单引号 SQL 字符串的文本:把引号写成两个(标准 SQL)或使用 MySQL 反斜杠转义,还可以选择用引号包裹结果。
每个 ' 都会变成 ''。适用于 PostgreSQL、SQLite、SQL Server、Oracle 以及开启 NO_BACKSLASH_ESCAPES 的 MySQL。在应用代码中请优先使用参数化查询。
完全在浏览器中运行,您的数据不会被上传。
相关工具
查看全部什么是 SQL 字符串转义?
SQL 转义工具会把原始文本转换成可以放入单引号 SQL 字符串字面量的形式。标准模式会把每个单引号写成两个(O'Reilly → O''Reilly);MySQL 模式则像 mysql_real_escape_string() 一样使用反斜杠转义。它适合手写 SQL;应用程序代码应当改用参数化查询。
如何使用 SQL 字符串转义
- 选择 转义方式:标准 SQL 或 MySQL。
- 需要的话,勾选 用单引号包裹结果。
- 在输入框中输入或粘贴原始值。
- 把转义后的输出复制到你的 SQL 中。
示例
O'Reilly \ x
O''Reilly \ x
标准 SQL 模式:引号被写成两个,反斜杠保持不变。
何时使用 SQL 字符串转义
适合编写一次性的 SQL 语句、种子数据或包含撇号文本的迁移脚本。不要在应用程序中把字符串转义当作 SQL 注入防护,请使用带绑定参数的预处理语句。标识符(表名、列名)的转义是另一个问题,不在此处理范围内。
SQL 字符串转义 的工作原理
标准 SQL(ANSI;PostgreSQL、SQLite、SQL Server、Oracle,以及启用 NO_BACKSLASH_ESCAPES 的 MySQL):每个 ' 变成 '';反斜杠是普通字符,保持不变。MySQL 模式(MySQL/MariaDB 默认设置):\0、换行、回车、反斜杠、'、" 和 Ctrl+Z(0x1A)前面会加上反斜杠,与 mysql_real_escape_string() 一致。标准模式下换行符保持为真正的换行,这在 SQL 字面量中是合法的。
常见用例
- 在手写的 INSERT 中插入 O'Reilly 这样的名字
- 编写包含带引号文本的种子或迁移脚本
- 为 MySQL 转储准备字符串字面量
- 了解 ANSI 与 MySQL 转义的区别
安全提示
转义不能取代预处理语句。所有处理都在本地完成,不会向服务器发送任何内容。
常见问题
转义足以防止 SQL 注入吗?
不够。请使用参数化查询;转义容易出错,而且取决于服务器设置和字符集。
PostgreSQL 应该选哪种模式?
标准 SQL。自 PostgreSQL 9.1 起,普通字符串中的反斜杠就是字面字符。
为什么 MySQL 需要不同的转义?
MySQL 默认把字符串中的反斜杠当作转义字符,所以反斜杠本身也必须转义。