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 周年「问答」打卡 ,欢迎正在阅读的你也加入。
5 回答1.5k 阅读
2 回答2.2k 阅读
3 回答782 阅读✓ 已解决
1 回答1k 阅读
1 回答698 阅读✓ 已解决
1 回答999 阅读
1 回答872 阅读
首先要说就算是常规的正则表达式。。。
\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
理当是不支持这么写。。。