mysql正斜杠_MySQL中的正斜杠和反斜杠 | | 数据库系统概论(字符匹配)
問題背景
今天數據庫老師留了一道實驗題,如下:
(14)查詢“A _ C”課程的課程號和學分。(如果沒有“A _ C”這么課,在course表中補上這門課, “ABC” “ACC” 等課程查不出來)
我的DBMS是MySQL,數據庫管理工具為Navicat
一開始,我是按照書上的知識點去敲得:
如果用戶要查詢的字符串本身就含有通配符 % 或 _ ,這時就需要使用ESCAPE ‘’ 短語對通配符進行轉義了。
ESCAPE ’ \ ’ 表示 “ \ ” 為換碼字符。這樣匹配字符串中緊跟在 “ \ ” 后面的字符 “ _ ” 不再具有通配符的含義,轉義為普通的 “ _ ” 字符。
代碼如下:
select Cno,Ccredit from course where Cname like 'A\_C' escape '\';
數據庫中的表格如下:
查詢結果如下:
不僅如此,還會對后面的代碼片產生影響:
當時我的心情
問題提出
1.為什么書上的這種方法得不到正確的數據呢?
首先,從代碼片分析, \ 后面的代碼都變成了字符串形式,說明 \ 將后面的 ’ 轉義成為了普通字符,所以會報錯。
然后,我又去MySQL的官網上查了一下MySQL 8.0參考手冊,進入MySQL 8.0 Reference Manual --> Functions and Operators --> String Functions and Operators --> String Comparison Functions and Operators
有這么一段話:
百度翻譯之后,得出:
要測試通配符的文字實例,請在其前面加上轉義符。如果未指定ESCAPE字符, \則假定為。
也就是說,不聲明的情況下 \ 默認為是轉義字符,所以不再需要escape短語將其轉化為換碼字符。
2.是因為DBMS的問題嘛?
關于這個問題 ,我去找我的同學試了試SQL Server,結果讓我很痛心😭😭😭,在SQL Server上無論是正斜杠還是反斜杠都可以運行成功,在這里就不演示了。
🏃?♂?
3.如何在MySQL上得到正確的數據呢?
繼續上面的參考文檔,可知任意的字符都可以轉化成換碼字符
所以,最后的答案可以有好多種:
例一:
select Cno,Ccredit from course where Cname like 'A/_C' escape '/';
例二:
select Cno,Ccredit from course where Cname like 'A\_C';
都可以得到正確答案
問題總結
經過這么一番查閱資料,我終于發現一個問題:標題中的正斜杠沒有絲毫的作用😑😑😑
但是問題不大,還是有蠻多收獲的:
1.MySQL中的 \ 是默認轉義字符,如果使用別的字符當作轉義字符可以使用ESCAPE短語
2.科普一哈: 正斜杠,又稱左斜杠,符號是"/";反斜杠,也稱右斜杠,符號是""。
3.正斜杠在別的地方還是有點用的,比如除法,分隔符等。下次還得想想正斜杠和反斜杠的用法區別。
如有問題請留言
總結
以上是生活随笔為你收集整理的mysql正斜杠_MySQL中的正斜杠和反斜杠 | | 数据库系统概论(字符匹配)的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 请问看科幻电影选择激光厅还是IMAX厅?
- 下一篇: tp3分布式session mysql_
