2017-06-15 61 views
3

我有一个表有以下数据混淆mysql像查询与转义字符?

select * from t; 
+----+----------------+ 
| id | a    | 
+----+----------------+ 
| 1 | u5929u732b  | 
| 2 | \u5929\u732b | 
| 3 | \\u5929\\u732b | 
+----+----------------+ 

查询结果使用等

select * from t where a = '\u5929\u732b'; 
+----+------------+ 
| id | a   | 
+----+------------+ 
| 1 | u5929u732b | 
+----+------------+ 

select * from t where a = '\\u5929\\u732b'; 
+----+--------------+ 
| id | a   | 
+----+--------------+ 
| 2 | \u5929\u732b | 
+----+--------------+ 

select * from t where a = '\\\\u5929\\\\u732b'; 
+----+----------------+ 
| id | a    | 
+----+----------------+ 
| 3 | \\u5929\\u732b | 
+----+----------------+ 

这些结果正如我所预料的那么没有问题,然后我用像查询结果,并在此一次,我很困惑

# as I expected 
select * from t where a like '\u5929\u732b'; 
+----+------------+ 
| id | a   | 
+----+------------+ 
| 1 | u5929u732b | 
+----+------------+ 

# I do not understand I think it should return result of id = 2 
select * from t where a like '\\u5929\\u732b'; 
+----+------------+ 
| id | a   | 
+----+------------+ 
| 1 | u5929u732b | 
+----+------------+ 

# I think it should return result of id = 3 
select * from t where a like '\\\\u5929\\\\u732b'; 
+----+--------------+ 
| id | a   | 
+----+--------------+ 
| 2 | \u5929\u732b | 
+----+--------------+ 

那么,为什么like查询是平等的查询有什么不同?

回答

2

LIKE默认情况下,与逃脱使用通配符“\”。

select * from t where a like '\\u5929\\u732b' ESCAPE '|' 

参考:

但是你可以通过写作改变
2

\是mysql中的一个转义字符。这意味着声明

select * from t where a like '\\u5929\\u732b';

相当于

select * from t where a like 'u5929u732b;

所以返回的答案是正确的。因此

你的第三个查询(select * from t where a like '\\\\u5929\\\\u732b';)是一个查询请求

select * from t where a like '\\u5929\\u732b;'

,因此也是正确的语句,你可以用它来获得所需的结果!

2

您需要与运营商like

select * from t where a like '%5929%';