MySQL运维实战(4.6) SQL_MODE之NO_BACKSLASH_ESCAPES

作者:俊达

在MySQL中,默认情况下,反斜杠(\)被用作转义字符,转义反斜杠(\)后一个字符;当设置NO_BACKSLASH_ESCAPES后,反斜杠(\)将不作为转义字符,而被视为普通字符。

下面是一个示例,说明了这两种情况的区别:
未设置NO_BACKSLASH_ESCAPES模式

sql 复制代码
mysql> create table t_escape(id int, a varchar(100));
Query OK, 0 rows affected (0.01 sec)

-- 默认情况,反斜杠是转义符,会改变后一个字符的含义。
mysql> set sql_mode='';
Query OK, 0 rows affected (0.00 sec)

mysql> insert into t_escape values(1, 'a\'b');
Query OK, 1 row affected (0.00 sec)

mysql> insert into t_escape values(1, 'a\\b');
Query OK, 1 row affected (0.00 sec)

mysql> select * from t_escape;
+------+------+
| id   | a    |
+------+------+
|    1 | a'b  |
|    2 | a\b  |
+------+------+
2 rows in set (0.00 sec)

设置NO_BACKSLASH_ESCAPES

sql 复制代码
SET sql_mode = 'NO_BACKSLASH_ESCAPES';
-- 这个SQL中单引号不匹配,报语法错误
mysql> insert into t_escape values(3, 'a\'b');
    '> ';
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'b');
'' at line 1

-- 2个反斜杠都写入到表中
mysql> insert into t_escape values(4, 'a\\b');
Query OK, 1 row affected (0.01 sec)


-- 单引号不能用反斜杠转义,使用单引号转义单引号(使用2个单引号代表一个单引号)。
mysql> insert into t_escape values(5, 'a''b');
Query OK, 1 row affected (0.01 sec)

mysql> select * from t_escape;
+------+------+
| id   | a    |
+------+------+
|    1 | a'b  |
|    2 | a\b  |
|    4 | a\\b |
|    5 | a'b  |
+------+------+
4 rows in set (0.00 sec)

总之,NO_BACKSLASH_ESCAPES模式决定了反斜杠在MySQL中的转义行为。设置了该模式后,反斜杠将被视为普通字符,而不设置该模式则反斜杠用来转义后一个字符。通过设置NO_BACKSLASH_ESCAPES,可以避免过度使用反斜杠转义符,使操作更加简洁和易读。

更多技术信息请查看云掣官网https://yunche.pro/?t=yrgw

相关推荐
奈斯先生Vector2 分钟前
从“能调用”到“可替换”:Coze 多模型 API 编排层设计指南
linux·运维·人工智能·ubuntu·平面·ios
技术不支持10 分钟前
wsl 离线安装 Debian 11, Debian 12等指定版本
运维·debian
树下水月12 分钟前
python3 使用canal监听后,kafka数据同步从mysql到clickhouse数据库 完整复盘
数据库·mysql·kafka
Databuff12 分钟前
使用Pinpoint作分布式链路跟踪系统
运维·分布式·运维开发·开源软件
小张同学a.16 分钟前
OpenStack 私有云实战 3—— Neutron 网络服务与 Dashboard 控制台部署
linux·运维·服务器·openstack
味悲22 分钟前
HAProxy 负载均衡实战:从环境搭建到七层/四层/HTTPS 全解析
运维·https·负载均衡
云飞云共享云桌面31 分钟前
机械设计研发成本优化:怎样用一台高性能服务器替代 10 台 SolidWorks 工作站?
大数据·运维·服务器·汽车·制造
东风破_32 分钟前
博客数据库进阶设计:点赞、收藏、评论、标签与文件表怎么建?
后端·mysql
Horn Still Sounds35 分钟前
Linux系统编程进阶:进程回收、程序替换与多线程并发模型
linux·运维·服务器·c语言
迷枫7122 小时前
SQL性能排查记录
java·数据库·sql