mysql5.7正则匹配空白

查询出某列所有的字符都是空白的,查了度娘使用正则匹配,sql如下:

SELECT * 
        FROM t_user
        WHERE nickname REGEXP '^\s+$'
        LIMIT 99999;
但是发现mysql竟然不支持\s,那么多人都是抄来抄去的,没人验证?于是找到文档参考:

参考官方文档:https://dev.mysql.com/doc/refman/5.7/en/regexp.html#regexp-syntax

发现还真的不支持,官方推荐的是 [[:blank:]]空格, [[:space:]]Space, tab, newline, and carriage return

所以我们修改为

SELECT *
FROM t_user
WHERE del_status=0  
AND nickname REGEXP '^([[:space:]])+$'

很遗憾,查询到的结果和实际观察整张表的有很大出入,开始怀疑sql哪里写错了,于是我又开始查看没有匹配到的数据到底有啥特点?

SELECT id,nickname,LENGTH(nickname),(nickname REGEXP '^([[:space:]])+$') AS result
FROM t_user
WHERE del_status=0  
AND id=xxx

发现匹配不上的都是长度是3的,匹配的结果确实是false,如果有编码相关印象的话,就猜测是不是这个东西没有匹配到中文的空格,用以下的语句验证下:

SELECT id,nickname,LENGTH(nickname),(nickname REGEXP '^(ㅤ|[[:space:]])+$') AS result
FROM t_user
WHERE del_status=0  
AND nickname REGEXP '^(ㅤ|[[:space:]])+$'

发现,果然不出所料!大功告成!

切记,在中文环境下,注意中英文之间的差异!!!!

你可能感兴趣的:(数据库,数据库)