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 字符串转义

  1. 选择 转义方式:标准 SQL 或 MySQL。
  2. 需要的话,勾选 用单引号包裹结果。
  3. 在输入框中输入或粘贴原始值。
  4. 把转义后的输出复制到你的 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 默认把字符串中的反斜杠当作转义字符,所以反斜杠本身也必须转义。

推荐的下一步

探索更多分类