簡體   English   中英

mysql-如何使用\\(反斜杠)處理查詢搜索?

[英]mysql-How to handle query search with \(backslash)?

我已經在mysql表中插入了一個帶有backslash(\\)的列,例如user\\12345但是當我在表中看到值時,我沒有看到forward slash(\\) 我只是看到user12345

當我用以下可能的方法用backslash(\\)查詢剛插入的行時,我總是得到零記錄。

select * from users where user='user12345'
select * from users where user='user\12345'
select * from users where user='user\\12345'

當我將列值復制粘貼到記事本中時,我可以看到每個列值的末尾都有一個回車符。 user12345CRLF,截至目前我無法更新/刪除回車。 但是我想用回車來獲取記錄。 我怎樣才能做到這一點?

我不想使用類似查詢,並且我想查詢確切的用戶名。 我怎樣才能做到這一點?

反斜杠字符\\用於轉義序列。 當您插入“ user \\ 12345”之類的值時,默認情況下,mysql服務器會將其作為轉義字符“ \\ 1”,但它不是任何特殊字符,因此會從字符串中丟棄\\。

Hitesh> update test set fname='user\344';
Query OK, 2 rows affected (0.06 sec)
Rows matched: 2  Changed: 2  Warnings: 0
Hitesh> select fname from test;
+---------+
| fname   |
+---------+
| user344 |
| user344 |
+---------+
2 rows in set (0.00 sec)

如果要以字符串形式存儲\\,則應使用\\

Hitesh> update test set fname='user\\344';
Query OK, 2 rows affected (0.03 sec)
Rows matched: 2  Changed: 2  Warnings: 0

Hitesh> select fname from test;
+----------+
| fname    |
+----------+
| user\344 |
| user\344 |
+----------+
2 rows in set (0.00 sec)

如果您不想將\\設置為轉義字符,則可以啟用sql模式NO_BACKSLASH_ESCAPES。

Hitesh> SET sql_mode = 'NO_BACKSLASH_ESCAPES';
Query OK, 0 rows affected (0.00 sec)

Hitesh> update test set fname='user\344';
Query OK, 0 rows affected (0.00 sec)
Rows matched: 2  Changed: 0  Warnings: 0

Hitesh> select fname from test;
+----------+
| fname    |
+----------+
| user\344 |
| user\344 |
+----------+
2 rows in set (0.00 sec)

對於回車到列末尾的情況,在查詢中可以在where子句中找到以\\ r結尾的字符串,並選擇列可以跳過最后一個字符\\ r

 Hitesh> set @@sql_mode='STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION';
 Query OK, 0 rows affected (0.00 sec)

 Hitesh> update test set fname='user344\r';
 Query OK, 2 rows affected (0.17 sec)
 Rows matched: 2  Changed: 2  Warnings: 0  

 Hitesh> select left( fname, CHAR_LENGTH(fname)-1) as fname from test where fname like '%\r';
    +---------+
    | fname   |
    +---------+
    | user344 |
    | user344 |
    +---------+
    2 rows in set (0.00 sec)

再次感謝@ Hitesh,@ Barmar。 我想出了完全匹配搜索查詢。 select * from users where user='user12345\\r'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM