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}',即想要用中文来检索匹配时,将中文字符括起来。这样后面紧跟的量词才会计算准确。

  • 相关阅读:
    关于动画的各种实现方法【转】
    关于弹出框的理念【转】
    jquery点击目标DIV以外关闭效果
    唯美诗句
    mouseover和this的巧用
    基于html5 canvas 的强大图表插件【Chart.js】
    关于百度地图API (持续跟新)
    JS的异步回调函数
    MMU内存管理单元(看书笔记)
    系统移植详细步骤
  • 原文地址:https://www.cnblogs.com/xiaoao/p/14704388.html
Copyright © 2011-2022 走看看