MySQL里的反斜杠(\)的使用
目錄
- 一、INSERT語(yǔ)句中有反斜杠(\)
- 1. 實(shí)際測(cè)試
- 2. 原理
- 二、SELECT查詢(xún)反斜杠(\)
- 1. 實(shí)際測(cè)試
- 2. 原理
一、INSERT語(yǔ)句中有反斜杠(\)
1. 實(shí)際測(cè)試
咱們用下面這些SQL來(lái)測(cè)試一下反斜杠(\)在INSERT語(yǔ)句中會(huì)是啥樣?
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:\\\\\陳哈哈\\\\\加班");
插入后的結(jié)果:
mysql> select * from demo0526; +----+-----------------------+ | id | text | +----+-----------------------+ | 1 | D:陳哈哈加班 | | 2 | D:\陳哈哈\加班| | 3 | D:\陳哈哈\加班| | 4 | D:\\陳哈哈\\加班 | | 5 | D:\\陳哈哈\\加班 | +----+-----------------------+ 5 rows in set (0.00 sec)
我們發(fā)現(xiàn)結(jié)果如下:
當(dāng)字符串中有1個(gè)反斜杠,插入后算0個(gè)。
當(dāng)字符串中有2個(gè)反斜杠,插入后算1個(gè)。
當(dāng)字符串中有3個(gè)反斜杠,插入后算1個(gè)。
當(dāng)字符串中有4個(gè)反斜杠,插入后算2個(gè)。
當(dāng)字符串中有5個(gè)反斜杠,插入后算2個(gè)。
2. 原理
在MySQL中,反斜杠在字符串中是屬于轉(zhuǎn)義字符,經(jīng)過(guò)語(yǔ)法解析器解析時(shí)會(huì)進(jìn)行一次轉(zhuǎn)義,所以當(dāng)我們insert反斜杠(\)字符時(shí),如 insert “\” 在數(shù)據(jù)庫(kù)中最終只會(huì)存儲(chǔ)"",第一個(gè)反斜杠(\)被當(dāng)做轉(zhuǎn)義字符處理。
同理,像這種 D:\\\陳哈哈\\\加班 字符串,語(yǔ)法解析器解析到第三個(gè)反斜杠(\)時(shí),又會(huì)把它當(dāng)做下一個(gè)轉(zhuǎn)義字符進(jìn)行處理,因此D:\\\陳哈哈\\\加班入庫(kù)后變成了D:\陳哈哈\加班。
二、SELECT查詢(xún)反斜杠(\)
1. 實(shí)際測(cè)試
我們還是沿用上面的表數(shù)據(jù),直接用like模糊匹配來(lái)測(cè)試一下。
mysql> select * from demo0526; +----+-----------------------+ | id | text | +----+-----------------------+ | 1 | D:陳哈哈加班 | | 2 | D:\陳哈哈\加班| | 3 | D:\陳哈哈\加班| | 4 | D:\\陳哈哈\\加班 | | 5 | D:\\陳哈哈\\加班 | +----+-----------------------+ 5 rows in set (0.00 sec)
我們先用單個(gè)反斜杠和兩個(gè)反斜杠看看能查到啥玩意兒
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 '%\%'查詢(xún)后發(fā)現(xiàn)都查不到數(shù)據(jù),納尼?上面的我白學(xué)了嗎?
別著急,我會(huì)告訴你SELECT語(yǔ)句中四個(gè)反斜杠(\\)代表一個(gè)么?呀,我趕快換成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)
喔?那我如果查詢(xún)表中帶有兩個(gè)反斜杠(\)的數(shù)據(jù),豈不是要like八個(gè)。。。。別攔我,我看看tm是誰(shuí)設(shè)計(jì)的這規(guī)則
mysql> SELECT * from demo0526 where text like "%\\\\\\\\%"; +----+-----------------------+ | id | text | +----+-----------------------+ | 4 | D:\\陳哈哈\\加班 | | 5 | D:\\陳哈哈\\加班 | +----+-----------------------+ 2 rows in set (0.00 sec)
2. 原理
在mysql的like語(yǔ)法中,like后邊的字符串除了會(huì)在語(yǔ)法解析時(shí)轉(zhuǎn)義一次外,還會(huì)在正則匹配時(shí)進(jìn)行第二次的轉(zhuǎn)義。因此如果期望最終匹配到"",就要反轉(zhuǎn)義兩次,也就是由"\\\\"到"\\"再到"\"。
如果是普通的精確查詢(xún)(=),則無(wú)需第二次的正則轉(zhuǎn)義,和INSERT語(yǔ)句一樣。
mysql> SELECT * from demo0526 where text = "\\\\"; +----+------+ | id | text | +----+------+ | 7 | \\ | +----+------+ 1 row in set (0.00 sec)
到此這篇關(guān)于MySQL里的反斜杠(\\)的使用的文章就介紹到這了,更多相關(guān)MySQL 反斜杠內(nèi)容請(qǐng)搜索以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持!
相關(guān)文章:
1. SQL2000管理SQL7服務(wù)器出現(xiàn)TIMEOUT問(wèn)題的解決2. 如何安裝MySQL 壓縮包3. MySQL存儲(chǔ)引擎選擇InnoDB還是MyISAM4. MYSQL技巧:為現(xiàn)有字段添加自增屬性5. Mybatis傳入List實(shí)現(xiàn)批量更新的示例代碼6. Microsoft Office Access取消主鍵的方法7. MySQL Innodb 存儲(chǔ)結(jié)構(gòu) 和 存儲(chǔ)Null值 用法詳解8. MySQL創(chuàng)始人發(fā)郵件尋求中國(guó)幫助9. mysql 視圖操作和存儲(chǔ)過(guò)程10. MySQL插入數(shù)據(jù)時(shí),如果記錄不存在則insert,如果存在則update
