网上查到\u4e00-\u9fa5表示unicode的中文范围,可数据库中测试的时候发现结果相反。(数据库为utf8)。现在求助大家一个mysql中的正则。要求如下:如果一个字符串中包含有中文(当然也可以包含数字,括号,下划线,空格,标点符号等等),包含中文是必须的条件,那么就返回true,否则返回false。请大家看仔细,一定要包含中文,其他字符不限制。

解决方案 »

  1.   

    筛选有汉字的记录:
    SELECT *
    FROM `snuo_news_text`
    WHERE textname REGEXP '[^ -~]' =1
      

  2.   

    英文字母的范围是从 空格 到 ~ [^ -~] 代码不属于空格到~的任何字符。 当有中文的时候会结果为 true, 但并不正确,比如当你的字符串中包括 \n , \t 等时也会为 true.
      

  3.   

    下例可以看出,在'ab12A\t=' 时结果并不正确。
    mysql> select 'ab12A=' regexp '[^ -~]';
    +--------------------------+
    | 'ab12A=' regexp '[^ -~]' |
    +--------------------------+
    |                        0 |
    +--------------------------+
    1 row in set (0.00 sec)mysql> select 'ab1字2A=' regexp '[^ -~]';
    +----------------------------+
    | 'ab1字2A=' regexp '[^ -~]' |
    +----------------------------+
    |                          1 |
    +----------------------------+
    1 row in set (0.00 sec)mysql> select 'ab12A\t=' regexp '[^ -~]';
    +----------------------------+
    | 'ab12A\t=' regexp '[^ -~]' |
    +----------------------------+
    |                          1 |
    +----------------------------+
    1 row in set (0.00 sec)
    正确的应该如下。
    mysql> select 'ab12A=' regexp '[^[.NUL.]-~]';
    +--------------------------------+
    | 'ab12A=' regexp '[^[.NUL.]-~]' |
    +--------------------------------+
    |                              0 |
    +--------------------------------+
    1 row in set (0.00 sec)mysql> select 'ab12A\t=' regexp '[^[.NUL.]-~]';
    +----------------------------------+
    | 'ab12A\t=' regexp '[^[.NUL.]-~]' |
    +----------------------------------+
    |                                0 |
    +----------------------------------+
    1 row in set (0.00 sec)mysql> select 'adf字123符串rg' regexp '[^[.NUL.]-~]';
    +----------------------------------------+
    | 'adf字123符串rg' regexp '[^[.NUL.]-~]' |
    +----------------------------------------+
    |                                      1 |
    +----------------------------------------+
    1 row in set (0.02 sec)mysql>