zoukankan      html  css  js  c++  java
  • mysql使用正则表达式匹配中文所遇到的问题

    1.前言

    计算机毕竟是外国人发明的,虽然计算机语言是机器语言,并不是某一种外语,但是计算机语言对于英语的适配性明显还是高于中文。在现在utf-8编码普及后,在程序里,中文字符和英文字符在很多情况下都可以兼容。毕竟都属于字符集中的一部分。但是在某些地方,对中文的支持还是有一定问题。

    2.遇到的问题。在mysql中可以用正则表达式来匹配查询(类似于like,比like更灵活)。但是在用正则表达式匹配中文的时候出现了问题。

    3.select 'abcdefg' regexp '^a.{5}g$',这一句sql不需要依赖数据库表就可以执行,返回结果是0或1.0代表匹配失败,1代表匹配成功。整个正则表达式是^a.{5}g$,表示以a开头,以g结尾,中间有五个任意字符。

    4.把上面的匹配换成中文,则会出现问题。select '笑傲独行侠' regexp '^笑.{3}侠$';返回的结果竟然是0,也就是匹配失败了。仔细检查了一下正则表达式,以笑开头,以侠结尾,中间三个任一字符,没毛病。但是就是返回0.这说明,对中文的个数处理和英文不同。改成

    select '笑傲独行侠' regexp '^笑.{9}侠$'则匹配成功。说明一个中文字符,在正则匹配的时候会被计算为三个字符!

    5.该怎么解决。所以在真正程序开发的时候,遇到的问题是这种形式:select * from table where table.name regexp '(笑傲独行侠){3}',即想要用中文来检索匹配时,将中文字符括起来。这样后面紧跟的量词才会计算准确。

  • 相关阅读:
    馨梦ASP服务器|馨梦ASP服务器V2014.7官方版下载
    类和对象的关系
    eclipse找不到或无法加载主类
    注释的最佳位置
    java软件开发
    使用MySqlHelper类查询并显示数据
    使用System.Web.HttpUtility.UrlEncode提示HttpUtility不是Web成员
    VB.net打印指定文件-(目前是打印文件名)
    馨梦ASP服务器|馨梦ASP服务器V2017.7官方版下载
    VB.net将中文转为URLencode问题
  • 原文地址:https://www.cnblogs.com/xiaoao/p/14704388.html
Copyright © 2011-2022 走看看