mysql匹配汉字
SELECT "中文" regexp "[\u0391-\uFFE5]"; [\u0391-\uFFE5] 是匹配中文的正则,可是执行这个,返回的是0,这是为什么??
网上查询 mysql查询包含汉字的sql,会搜到两种:
一种是 SELECT column FROM table WHERE length(column)!=char_length(column)
这种不行,如果存在一些特殊字符,无法满足
另一种就是 通过正则,但是我试了下,如开始说的,也有问题
mysql匹配汉字
SELECT "中文" regexp "[\u0391-\uFFE5]"; [\u0391-\uFFE5] 是匹配中文的正则,可是执行这个,返回的是0,这是为什么??
网上查询 mysql查询包含汉字的sql,会搜到两种:
一种是 SELECT column FROM table WHERE length(column)!=char_length(column)
这种不行,如果存在一些特殊字符,无法满足
另一种就是 通过正则,但是我试了下,如开始说的,也有问题
之前用过一种方法,就干脆匹配除开字母数字等字符,regexp '[^[:alnum:][:punct:][:space:][:graph:]]',当然如果来个希腊字母、西里尔字母啥的就失效了。
希望能帮助到你。
SELECT * FROM 表名 where 字段名 regexp "[\u0391-\uFFE5]"已参与了 SegmentFault 思否社区 10 周年「问答」打卡 ,欢迎正在阅读的你也加入。
2 回答839 阅读
2 回答617 阅读
2 回答684 阅读
1 回答646 阅读
首先要说就算是常规的正则表达式。。。
\u0391-\uFFE5也是个很糟糕的做法。。。CJK扩展区已经从2E80扩展到3134F了,这东西你要精确判断是个CJK区的汉字那你写不完的。。。而且0391什么鬼,不是判断双字节的吗?那和length!=char_length基本一样而且还过时啊。。。
其次参考MySQL官方文档:
The REGEXP and RLIKE operators work in byte-wise fashion, so they are not multibyte safe and may produce unexpected results with multibyte character sets理当是不支持这么写。。。