MySQL中ESCAPE关键字的用法详解
MySQL中ESCAPE关键字的用法详解
1. mysql转义概述
转义即表示转义字符原来的语义,一个转义字符的目的是开始一个字符序列,使得转义字符开头的该字符序列具有不同于该字符序列单独出现时的语义。
MySQL中,转义字符以“\”开头,编程中常见的转义字符,在MySQL均是有效的,在此不做赘述和讨论。在此,主要通过“%” 和 “_”来对ESCAPE关键字的作用进行说明。
%:匹配任意多个字符。
_:匹配单一字符。
2. escape验证
-- MySQL中ESCAPE关键字的用法详解
-- MySQL中,转义字符以“\”开头,编程中常见的转义字符,在MySQL均是有效的,在此不做赘述和讨论。在此,主要通过“%” 和 “_”来对ESCAPE关键字的作用进行说明。
-- %:匹配任意多个字符。
-- _:匹配单一字符。
CREATE TABLE `escape_test` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(255) DEFAULT NULL,
`uid` VARCHAR(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8;
-- 查询表
SELECT * FROM escape_test;
-- 删除表
DROP TABLE escape_test;
-- 删除数据
DELETE FROM escape_test;
-- 插入数据
INSERT INTO escape_test (NAME,uid) VALUES('张三','hello');
INSERT INTO escape_test (NAME,uid) VALUES('李四_五','world');
INSERT INTO escape_test (NAME,uid) VALUES('王五%','world');
INSERT INTO escape_test (NAME,uid) VALUES('%a','world');
INSERT INTO escape_test (NAME,uid) VALUES('%_','world');
### 查询名字中带明字的用户
SELECT * FROM escape_test WHERE NAME LIKE CONCAT("%", "三", "%")
-- 如果我们要匹配“%”或者“_”时,就必须使用“\”进行转义,如下:
### 查询名字带有%字符的用户
-- % 转义前,%全查
SELECT * FROM escape_test WHERE NAME LIKE CONCAT("%", "%", "%");
-- % 转义后 只匹配含有%的
SELECT * FROM escape_test WHERE NAME LIKE CONCAT("%", "\%", "%");
-- ESCAPE的用法
-- ESCAPE 关键字的主要作用就是指定一个字符替代“\”的作用。
### 查询名字带有“%”字符的用户
SELECT * FROM escape_test WHERE NAME LIKE CONCAT("%", "\%", "%");
SELECT * FROM escape_test WHERE NAME LIKE CONCAT("%", "$%", "%") ESCAPE "$";
### 查询名字带有“_”字符的用户
SELECT * FROM escape_test WHERE NAME LIKE CONCAT("%", "\_", "%");
SELECT * FROM escape_test WHERE NAME LIKE CONCAT("%", "a_", "%") ESCAPE "a";
### 假设存在名字为 %a 和 %_ 两个的用户
SELECT * FROM escape_test WHERE NAME LIKE "a%_" ESCAPE "a" ; ### %a %_
SELECT * FROM escape_test WHERE NAME LIKE "a%a" ESCAPE "a" ; ### %a
SELECT * FROM escape_test WHERE NAME LIKE "a%a_" ESCAPE "a" ; ### %_