正则表达式在MySQL5.7和MySQL8.0中的用法以及区别(一)
大家好,我是徐清风。一个专注分享工作小技巧的数据分析人。我将不定期分享自己的经历,欢迎大家关注我,共同学习、共同进步!
各位客官姥爷好,欢迎回来。我们上节给出了,我们上节给的是5.7版本的安装教程,鉴于有部分企业已经使用8.0版本的MySQL,那么下面我将对比着学习正则表达式在这两个版本中的差异。
准备工作
1. 启动MySQL服务(以管理员身份运行CMD)
我这里的两个服务mysql80和mysql57分别对应的是mysql8.0版本和5.7版本
2. 登录数据库(需成功开启mysql服务)
3306端口为mysql8.0版本,3307为mysql5.7版本。
C:\Users\Administrator>mysql -P 3306 -u root -p
C:\Users\Administrator>mysql -P 3307 -u root -p
语法
在应用正则表达式前,先来了解MySQL数据库中的正则表达式语法(以下语法均适用于8.0版本和5.7版本):
字符或者字段名 regex 正则表达式
等价于
字符或者字段名 rlike 正则表达式
如果能匹配结果到则返回1,否则返回0。
示例:
mysql> select '1' regexp '1', '0' regexp '1';
'1' rlike '1', '0' rlike '1'; select
如果加否定的话,则需在regex或者rlike 加not即可
示例:
mysql> select '1' not rlike '1', '0' not regexp '1';
元字符
通过我们前面小节的学习,大家都了解了正则表达式通用的元字符,那么MySQL数据库到底支不支持它们呢?我们来看看:
1. 转义符(均适用于8.0版本和5.7版本)
在通用的元字符中\表示转义,在mysql中是否适用呢?
示例:匹配下面的*号
mysql> select '*' regexp '\*';
报语法错误,那么数据库中正确的用法是什么呢?双斜杠\\
'*' regexp '\\*'; select
注意这里的转义是指在正则表达式中的转义,如果是字符中的转义,仍然是单斜杠表示转义,比如\n的转义,则是\\n。
2. 格式组(换行、回车、制表、换页符)
我们先来看个制表符:
5.7版本
'\t' regexp '\t', '\t' regexp '\\t', 't' regexp '\\t'; select
8.0版本
通过以上发现5.7版本中\t表示制表符,而\\t表示匹配字母t;而在8.0中\t和\\t均表示匹配\t制表符。其他三个格式符号类似。
3. .号
在通用元字符中.表示除\n以外的任意字符,那么在mysql中是否是这样呢?
5.7版本
mysql> select '\n' regexp '.';
8.0版本
通过以上结果可以发现,5.7版本可以匹配换行而8.0版本不可以。因此在使用的时候需要注意数据库的版本。
以上就是本次的分享,正则表达式之数据库系列正在进行中,欢迎各位客官姥爷关注我,方便您第一次时间收到【干货】!
转行学数据分析
清风在这等你~
您的“在看”,就是对清风最大的鼓励~