问题是这样,我在SQL脚本中写出select * from sheet1 where album regexp'..'
目的是找出表里2个字符的数据,但是结果却显示了各种数量的汉字,如保镖,爆米花,all in,复仇血战等等,
在MYSQL里一个汉字应该对应2个字符吧,自己始终不太明白是怎么回事希望大家解惑!

解决方案 »

  1.   

    如果你的字符集是UTF、GBK、GB2312等等双字节字符集的话,每个字母、汉字2个字节
      

  2.   

    我知道每个汉字对应2个字节,但是在MYSQL里正则表达式..表示2个字符,一个汉字一个字母应该都是一个字符,但是为什么查出来那么多数据呢?还有点不太懂,您能说的再清楚一点吗?
      

  3.   


    如果你的字符集设置为GBK,UTF,则处理过程中会把两个字节的字符认为是一个字符。
    正则式中 . 代表一个字符,不是一个字节。
      

  4.   

    哦,明白你意思了,你是不是想下如下结果。select * from sheet1 where album regexp '^..$' ;
      

  5.   

    只有2个字母或者汉字?也就是LEN(字段)=2?
      

  6.   

    select * from tt where xm regexp '^.{2}$' 
    调试通过
      

  7.   

    NO,
    你用LEGTH(字段名)测试一下长度,如为4
    select *,length(gg) from aa where gg regexp '^.{4}$' 就OK
      

  8.   


    select * from sheet1 where album regexp '^.*$' ;
    不妨先试试,多字符的,然后再逐步减少字符的数量。会不会和你字符集设置有关。
      

  9.   

    还是不行啊,我用了这个语句,select *,length(album) from sheet1 where album regexp '^..$' 结果还是空,改为select *,length(album) from sheet1 where album regexp '^...$' ,结果却出现了数据‘宫’字,很是疑惑啊
      

  10.   

    不用WHERE,测试一下length(album)的长度
      

  11.   

    测试一下length(album)的值是多少
    比如:
    12  长度2 
    一  长度2 OR 1
    王2 长度3 OR 2
      

  12.   

    真的太谢谢您了,这样我就比较直观的看见问题了,结果显示一个汉字对应的length长度为3,不过这个3是什么意思?一个汉字不就是一个字符吗?为什么会显示3呢?我脑子有点乱了
      

  13.   

    检查一下表中album字段的字符集
      

  14.   

    我的数据库字符集是UTF8,您说的字段字符集是什么意思?
      

  15.   

    LENGTH(str) Returns the length of the string str, measured in bytes. A multi-byte character counts as multiple bytes. This means that for a string containing five two-byte characters, LENGTH() returns 10, whereas CHAR_LENGTH() returns 5. LENGTH按字节返回