select   *   from   result   where   titlename   like   "%语文%";
1.这个查询结果中titlename中还是会出现 与‘语文’不相关的标题,为什么会这样?有人说用:
select   *   from   result   where   titlename   like binary  "%语文%";
2.为什么要用 select   *   from   result   where   titlename   like binary "%语文%";   
3.select   *   from   result   where binary titlename   like  "%语文%";   //这个为什么不行了???谢谢高手回答,我总分不清

解决方案 »

  1.   

    很显然字符集设置的问题。可能的原因很多,需要一步一步查一下。http://blog.csdn.net/ACMAIN_CHM/archive/2009/05/12/4174186.aspx
    MySQL 中文显示乱码
      

  2.   

    检查你的字符集
    show variables like 'char%'; 
      

  3.   

    Variable_name            | Value
    -------------------------+---------------------------------
    character_set_client     | latin1
    character_set_connection | latin1
    character_set_database   | latin1
    character_set_filesystem | binary
    character_set_results    | latin1
    character_set_server     | latin1
    character_set_system     | utf8
    character_sets_dir       | /usr/local/share/mysql/charsets/
      

  4.   

    说明什么需要把所有编码都改成 utf8?
      

  5.   

    将字符集修改为UTF8 OR GBK,在新字符集下重新插入记录
      

  6.   

    如果我不改变字符集,那么我要正常查询是不是要:
    select  *  from  result  where  titlename  like binary "%语文%";  这样写,like binary
      

  7.   

    还要看你表中的数据是什么。show create table t1;
    show variables like 'char%';
      

  8.   

    ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=latin1 
    都是以latin1这种编码的
      

  9.   

    你的字符集是匹配的,
    character_set_client   | latin1
    然后表中也是 DEFAULT CHARSET=latin1 所以存储汉字没有问题。但问题在于latin1 默认校对集是 latin1_swedish_ci, 所以你只能以二进制的方式进行比较,不能直接胜利MYSQL的校对集进行比较。解决方法
    1. 使用binary 修饰符,强制转为二进制比较
    2. 设置系统校对集为 latin1_bin
    3. 既然是中文,建议使用支持中文的字符集 UTF8, GB2312, GBK 等,需要先导出数据,然后以新字符集重建数据库后,再导入数据。