vlambda博客
学习文章列表

正则表达式在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
正则表达式在MySQL5.7和MySQL8.0中的用法以及区别(一)
C:\Users\Administrator>mysql -P 3307 -u root -p
正则表达式在MySQL5.7和MySQL8.0中的用法以及区别(一)


语法


在应用正则表达式前,先来了解MySQL数据库中的正则表达式语法(以下语法均适用于8.0版本和5.7版本):

字符或者字段名 regex 正则表达式等价于字符或者字段名 rlike 正则表达式

如果能匹配结果到则返回1,否则返回0。

示例:

mysql> select '1' regexp '1', '0' regexp '1';
正则表达式在MySQL5.7和MySQL8.0中的用法以及区别(一)
mysql> select '1' rlike '1', '0' rlike '1';
正则表达式在MySQL5.7和MySQL8.0中的用法以及区别(一)

    如果加否定的话,则需在regex或者rlike 加not即可

    示例:

mysql> select '1' not rlike '1', '0' not regexp '1';
正则表达式在MySQL5.7和MySQL8.0中的用法以及区别(一)


元字符


通过我们前面小节的学习,大家都了解了正则表达式通用的元字符,那么MySQL数据库到底支不支持它们呢?我们来看看:


1. 转义符(均适用于8.0版本和5.7版本

    在通用的元字符中\表示转义,在mysql中是否适用呢?

    示例:匹配下面的*号

mysql> select '*' regexp '\*';
正则表达式在MySQL5.7和MySQL8.0中的用法以及区别(一)

    报语法错误,那么数据库中正确的用法是什么呢?双斜杠\\

mysql> select '*' regexp '\\*';
正则表达式在MySQL5.7和MySQL8.0中的用法以及区别(一)

    注意这里的转义是指在正则表达式中的转义,如果是字符中的转义,仍然是单斜杠表示转义,比如\n的转义,则是\\n。


2. 格式组(换行、回车、制表、换页符)

    我们先来看个制表符:

    5.7版本

mysql> select '\t' regexp '\t', '\t' regexp '\\t', 't' regexp '\\t';
正则表达式在MySQL5.7和MySQL8.0中的用法以及区别(一)

    8.0版本

正则表达式在MySQL5.7和MySQL8.0中的用法以及区别(一)

    通过以上发现5.7版本中\t表示制表符,而\\t表示匹配字母t;而在8.0中\t和\\t均表示匹配\t制表符。其他三个格式符号类似。


3. .号

    在通用元字符中.表示除\n以外的任意字符,那么在mysql中是否是这样呢?

    5.7版本

mysql> select '\n' regexp '.';
正则表达式在MySQL5.7和MySQL8.0中的用法以及区别(一)

    8.0版本

正则表达式在MySQL5.7和MySQL8.0中的用法以及区别(一)

通过以上结果可以发现,5.7版本可以匹配换行而8.0版本不可以。因此在使用的时候需要注意数据库的版本。


以上就是本次的分享,正则表达式之数据库系列正在进行中,欢迎各位客官姥爷关注我,方便您第一次时间收到【干货】!


转行学数据分析

清风在这等你~

您的“在看”,就是对清风最大的鼓励~