查询出某列所有的字符都是空白的,查了度娘使用正则匹配,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:]])+$'
发现,果然不出所料!大功告成!
切记,在中文环境下,注意中英文之间的差异!!!!