原文:https://blog.csdn.net/qq_39390545/article/details/117296607
在MySQL中有很多特殊符號都是相當惡心的,比如字符串中有單引號(')、雙引號(")、反斜杠(\)等等,同學們可以先腦補一下可能會出現啥問題?
在我們平時操作SQL中,一不注意這些符號就會給你背上一口鍋。
你還別不信,聽叔一句勸,這里的水很深,有些東西,你把握不住…《潘嘎之交》好了,今天咱們就一起針對最膈應人的反斜杠(\),來看看都有哪些坑。
一、INSERT語句中有反斜杠(\) 1、實際測試
當字符串中有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:\\陳哈哈\\加班 |
我們先用單個反斜杠和兩個反斜杠看看能查到啥玩意兒
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 '%\%'查詢后發現都查不到數據,納尼?上面的我白學了嗎?另外,MySQL 面試題和答案都整理完了,微信搜索Java技術棧,在后臺發送關鍵字:面試。
mysql> SELECT * from demo0526 where text like '%\\\\\\\\%';
2、又是啥原理?
+----+-----------------------+
| id | text |
+----+-----------------------+
| 4 | D:\\陳哈哈\\加班 |
| 5 | D:\\陳哈哈\\加班 |
+----+-----------------------+
2 rows in set (0.00 sec)
總結
好了,看到這里同學們有什么感受呢?是不是發現MySQL中還是存在很多不方便的語法,進步空間還很大呀~~
在日常工作中,也會經常碰到這種符號引發的問題,尤其是用戶在界面填寫的數據,建議要做相關限定,明確哪些符號不允許
END
2021年Java原創面試題庫連載中
更多內容,點擊上方名片查看
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.