MySQL中的正斜杠和反斜杠 | | 数据库系统概论(字符匹配)
问题背景
今天数据库老师留了一道实验题,如下:
(14)查询“A _ C”课程的课程号和学分。(如果没有“A _ C”这么课,在course表中补上这门课, “ABC” “ACC” 等课程查不出来)
我的DBMS是MySQL,数据库管理工具为Navicat
一开始,我是按照书上的知识点去敲得:
如果用户要查询的字符串本身就含有通配符 % 或 _ ,这时就需要使用ESCAPE ‘<换码字符>’ 短语对通配符进行转义了。
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上得到正确的数据呢?
继续上面的参考文档,可知任意的字符都可以转化成换码字符
所以,最后的答案可以有好多种:
例一:
例二:
问题总结
经过这么一番查阅资料,我终于发现一个问题:标题中的正斜杠没有丝毫的作用😑😑😑
但是问题不大,还是有蛮多收获的:
1.MySQL中的 \ 是默认转义字符,如果使用别的字符当作转义字符可以使用ESCAPE短语
2.科普一哈: 正斜杠,又称左斜杠,符号是"/";反斜杠,也称右斜杠,符号是""。
3.正斜杠在别的地方还是有点用的,比如除法,分隔符等。下次还得想想正斜杠和反斜杠的用法区别。
如有问题请留言
__EOF__

本文链接:https://www.cnblogs.com/HBU-xuhaiyang/p/13111410.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~