2017-06-15 13 views
3

私は、クエリの結果は、その後、私は結果を照会するように使用され、この中で、私は何の問題は期待できないと同じように等しいエスケープ文字でmysqlのようなクエリの混乱?

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 | 
+----+----------------+ 

にこれらの結果を使用してデータ

select * from t; 
+----+----------------+ 
| id | a    | 
+----+----------------+ 
| 1 | u5929u732b  | 
| 2 | \u5929\u732b | 
| 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

でワイルドカード文字を使用する必要があります。

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は「\」でデフォルトでエスケープされlikeオペレータ

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