MySQL里的反斜杠(\\)的使用
一、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:\\\\\陳哈哈\\\\\加班');
插入后的結(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個反斜杠,插入后算0個。
當(dāng)字符串中有2個反斜杠,插入后算1個。
當(dāng)字符串中有3個反斜杠,插入后算1個。
當(dāng)字符串中有4個反斜杠,插入后算2個。
當(dāng)字符串中有5個反斜杠,插入后算2個。
2. 原理
在MySQL中,反斜杠在字符串中是屬于轉(zhuǎn)義字符,經(jīng)過語法解析器解析時會進(jìn)行一次轉(zhuǎn)義,所以當(dāng)我們insert反斜杠(\)字符時,如 insert “\” 在數(shù)據(jù)庫中最終只會存儲"",第一個反斜杠(\)被當(dāng)做轉(zhuǎn)義字符處理。
同理,像這種 D:\\\陳哈哈\\\加班 字符串,語法解析器解析到第三個反斜杠(\)時,又會把它當(dāng)做下一個轉(zhuǎn)義字符進(jìn)行處理,因此D:\\\陳哈哈\\\加班入庫后變成了D:\陳哈哈\加班。
二、SELECT查詢反斜杠(\)
1. 實際測試
我們還是沿用上面的表數(shù)據(jù),直接用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 '%\%'查詢后發(fā)現(xiàn)都查不到數(shù)據(jù),納尼?上面的我白學(xué)了嗎?
別著急,我會告訴你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)
喔?那我如果查詢表中帶有兩個反斜杠(\)的數(shù)據(jù),豈不是要like八個。。。。別攔我,我看看tm是誰設(shè)計的這規(guī)則
mysql> SELECT * from demo0526 where text like '%\\\\\\\\%'; +----+-----------------------+ | id | text | +----+-----------------------+ | 4 | D:\\陳哈哈\\加班 | | 5 | D:\\陳哈哈\\加班 | +----+-----------------------+ 2 rows in set (0.00 sec)
2. 原理
在mysql的like語法中,like后邊的字符串除了會在語法解析時轉(zhuǎn)義一次外,還會在正則匹配時進(jìn)行第二次的轉(zhuǎn)義。因此如果期望最終匹配到"",就要反轉(zhuǎn)義兩次,也就是由"\\\\"到"\\"再到"\"。
如果是普通的精確查詢(=),則無需第二次的正則轉(zhuǎn)義,和INSERT語句一樣。
mysql> SELECT * from demo0526 where text = '\\\\'; +----+------+ | id | text | +----+------+ | 7 | \\ | +----+------+ 1 row in set (0.00 sec)
到此這篇關(guān)于MySQL里的反斜杠(\\)的使用的文章就介紹到這了,更多相關(guān)MySQL 反斜杠內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
mysql xtrabackup 備份恢復(fù)實現(xiàn)分享
Xtrabackup是由percona提供的mysql數(shù)據(jù)庫備份工具,據(jù)官方介紹,這也是世界上惟一一款開源的能夠?qū)nnodb和xtradb數(shù)據(jù)庫進(jìn)行熱備的工具2012-11-11
windows環(huán)境下mysql數(shù)據(jù)庫的主從同步備份步驟(單向同步)
本文主要是向大家描述的是在windows環(huán)境之下實現(xiàn)MySQL數(shù)據(jù)庫的主從同步備份的正確操作方案,以下就是文章的詳細(xì)內(nèi)容描述2011-05-05
mysql ONLY_FULL_GROUP_BY設(shè)置sql_mode無效排查問題(windows)
這篇文章主要介紹了mysql ONLY_FULL_GROUP_BY設(shè)置sql_mode無效排查問題(windows),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-09-09
Mysql服務(wù)器的安裝配置與啟動關(guān)閉方法詳解
MySQL 是最流行的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),在 WEB 應(yīng)用方面 MySQL 是最好的 RDBMS(Relational Database Management System:關(guān)系數(shù)據(jù)庫管理系統(tǒng))應(yīng)用軟件之一2021-10-10
mysql數(shù)據(jù)庫sql優(yōu)化原則(經(jīng)驗總結(jié))
這里的原則 只是針對mysql數(shù)據(jù)庫,其他的數(shù)據(jù)庫 某些是殊途同歸,某些還是存在差異。我總結(jié)的也是mysql普遍的規(guī)則,對于某些特殊情況得特殊對待。在構(gòu)造sql語句的時候養(yǎng)成良好的習(xí)慣2014-03-03

