天天看點

MySQL 中的反斜杠 \\,真是太坑了!!

在MySQL中有很多特殊符号都是相當惡心的,比如字元串中有單引号(')、雙引号(")、反斜杠(\)等等,同學們可以先腦補一下可能會出現啥問題?

在我們平時操作SQL中,一不注意這些符号就會給你背上一口鍋。

你還别不信,聽叔一句勸,這裡的水很深,有些東西,你把握不住…《潘嘎之交》

好了,今天咱們就一起針對最膈應人的反斜杠(\),來看看都有哪些坑。

一、INSERT語句中有反斜杠(\)

1、實際測試

咱們用下面這些SQL來測試一下反斜杠(\)在INSERT語句中會是啥樣?

MySQL 中的反斜杠 \\,真是太坑了!!

我們發現結果如下:

當字元串中有1個反斜杠,插入後算0個。

當字元串中有2個反斜杠,插入後算1個。

當字元串中有3個反斜杠,插入後算1個。

當字元串中有4個反斜杠,插入後算2個。

當字元串中有5個反斜杠,插入後算2個。

2、是啥原理?

後來發現,原因其實很簡單,在MySQL中,反斜杠在字元串中是屬于轉義字元,經過文法解析器解析時會進行一次轉義,是以當我們insert反斜杠(\)字元時,如 insert “\” 在資料庫中最終隻會存儲"",第一個反斜杠(\)被當做轉義字元處理。

同理,像這種 D:\\陳哈哈\\加班 字元串,文法解析器解析到第三個反斜杠(\)時,又會把它當做下一個轉義字元進行處理,是以D:\\陳哈哈\\加班入庫後變成了D:\陳哈哈\加班。

是以我們在代碼中處理插入語句碰到反斜杠時,注意\是否已經改成\,否則入庫後字元串會不一緻。

二、SELECT查詢反斜杠(\)

我們還是沿用上面的表資料,直接用like模糊比對來測試一下。

MySQL 中的反斜杠 \\,真是太坑了!!
MySQL 中的反斜杠 \\,真是太坑了!!