MySQL里的反斜杠(\)的使用
目錄
- 一、INSERT語句中有反斜杠(\)
- 1. 實際測試
- 2. 原理
- 二、SELECT查詢反斜杠(\)
- 1. 實際測試
- 2. 原理
一、INSERT語句中有反斜杠(\)
1. 實際測試
咱們用下面這些SQL來測試一下反斜杠(\)在INSERT語句中會是啥樣?
INSERT INTO `demo0526` (`id`, `text`) VALUES (null, "D:\陳哈哈\加班"); INSERT INTO `demo0526` (`id`, `text`) VALUES (null, "D:\\陳哈哈\\加班"); INSERT INTO `demo0526` (`id`, `text`) VALUES (null, "D:\\\陳哈哈\\\加班"); INSERT INTO `demo0526` (`id`, `text`) VALUES (null, "D:\\\\陳哈哈\\\\加班"); INSERT INTO `demo0526` (`id`, `text`) VALUES (null, "D:\\\\\陳哈哈\\\\\加班");
插入后的結果:
mysql> select * from demo0526; +----+-----------------------+ | id | text | +----+-----------------------+ | 1 | D:陳哈哈加班 | | 2 | D:\陳哈哈\加班| | 3 | D:\陳哈哈\加班| | 4 | D:\\陳哈哈\\加班 | | 5 | D:\\陳哈哈\\加班 | +----+-----------------------+ 5 rows in set (0.00 sec)
我們發現結果如下:
當字符串中有1個反斜杠,插入后算0個。
當字符串中有2個反斜杠,插入后算1個。
當字符串中有3個反斜杠,插入后算1個。
當字符串中有4個反斜杠,插入后算2個。
當字符串中有5個反斜杠,插入后算2個。
2. 原理
在MySQL中,反斜杠在字符串中是屬于轉義字符,經過語法解析器解析時會進行一次轉義,所以當我們insert反斜杠(\)字符時,如 insert “\” 在數據庫中最終只會存儲"",第一個反斜杠(\)被當做轉義字符處理。
同理,像這種 D:\\\陳哈哈\\\加班 字符串,語法解析器解析到第三個反斜杠(\)時,又會把它當做下一個轉義字符進行處理,因此D:\\\陳哈哈\\\加班入庫后變成了D:\陳哈哈\加班。
二、SELECT查詢反斜杠(\)
1. 實際測試
我們還是沿用上面的表數據,直接用like模糊匹配來測試一下。
mysql> select * from demo0526; +----+-----------------------+ | id | text | +----+-----------------------+ | 1 | D:陳哈哈加班 | | 2 | D:\陳哈哈\加班| | 3 | D:\陳哈哈\加班| | 4 | D:\\陳哈哈\\加班 | | 5 | D:\\陳哈哈\\加班 | +----+-----------------------+ 5 rows in set (0.00 sec)
我們先用單個反斜杠和兩個反斜杠看看能查到啥玩意兒
mysql> SELECT * from demo0526 where text like "%\%"; Empty set (0.00 sec) mysql> SELECT * from demo0526 where text like "%\\%"; Empty set (0.00 sec)
啊!!我們用like ‘%%’、like '%\%'查詢后發現都查不到數據,納尼?上面的我白學了嗎?
別著急,我會告訴你SELECT語句中四個反斜杠(\\)代表一個么?呀,我趕快換成like '%\\%'試一試。
mysql> SELECT * from demo0526 where text like "%\\\\%"; +----+-----------------------+ | id | text | +----+-----------------------+ | 2 | D:\陳哈哈\加班| | 3 | D:\陳哈哈\加班| | 4 | D:\\陳哈哈\\加班 | | 5 | D:\\陳哈哈\\加班 | +----+-----------------------+ 4 rows in set (0.00 sec)
喔?那我如果查詢表中帶有兩個反斜杠(\)的數據,豈不是要like八個。。。。別攔我,我看看tm是誰設計的這規則
mysql> SELECT * from demo0526 where text like "%\\\\\\\\%"; +----+-----------------------+ | id | text | +----+-----------------------+ | 4 | D:\\陳哈哈\\加班 | | 5 | D:\\陳哈哈\\加班 | +----+-----------------------+ 2 rows in set (0.00 sec)
2. 原理
在mysql的like語法中,like后邊的字符串除了會在語法解析時轉義一次外,還會在正則匹配時進行第二次的轉義。因此如果期望最終匹配到"",就要反轉義兩次,也就是由"\\\\"到"\\"再到"\"。
如果是普通的精確查詢(=),則無需第二次的正則轉義,和INSERT語句一樣。
mysql> SELECT * from demo0526 where text = "\\\\"; +----+------+ | id | text | +----+------+ | 7 | \\ | +----+------+ 1 row in set (0.00 sec)
到此這篇關于MySQL里的反斜杠(\\)的使用的文章就介紹到這了,更多相關MySQL 反斜杠內容請搜索以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持!
相關文章:
