混淆mysql像查询与转义字符?
问题描述:
我有一个表有以下数据混淆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
查询是平等的查询有什么不同?
答
的LIKE
默认情况下,与逃脱使用通配符“\”。
select * from t where a like '\\u5929\\u732b' ESCAPE '|'
参考:
但是你可以通过写作改变
答
\
是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;'
,
,因此也是正确的语句,你可以用它来获得所需的结果!
答
您需要与运营商like
select * from t where a like '%5929%';