select * from product where model like '%$key%' 
这个可以搜索中文
select * from product where binary model like '%$key%' 
这个不可以搜索中文
望大师们帮一下解决一下!折腾好久了!
php文件 数据库 表 全都是utf8编码
如果是编码问题,第一个应该就不能搜索才对呀!

解决方案 »

  1.   

    应该是编码的问题。做如果检查。1.  show create table product ;
    2. show variables like 'char%';
    
      

  2.   

    show variables like 'char%';
    贴结果,估计是字符集问题
      

  3.   

    show create table product:
    product CREATE TABLE `product` ( `pid` smallint(5) unsigned NOT NULL
    `pmodel` varchar(20) CHARACTER SET utf8 NOT NULL
    `bigclass` smallint(2) unsigned NOT NULL
    `smallclass` smallint(2) unsigned NOT NULL
    `pindex` text COLLATE utf8_unicode_ci NOT NULL
    `pdescription` text COLLATE utf8_unicode_ci NOT NULL
    `pimage` char(18) COLLATE utf8_unicode_ci NOT NULL
    PRIMARY KEY (`pid`)
    KEY `bigclass` (`bigclass`)
    KEY `smallclass` (`smallclass`)
    CONSTRAINT `product_ibfk_1` FOREIGN KEY (`bigclass`) REFERENCES `class` (`cid`)
    CONSTRAINT `product_ibfk_2` FOREIGN KEY (`smallclass`) REFERENCES `class` (`cid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci 
      

  4.   

    LIKE不要考虑了,效率太差!
    找全文搜索解决您的问题吧。
      

  5.   

    在你PHP查询前,mysql_query("set name 'utf8'"); 试一下。
      

  6.   

    set name早试过了!问题依旧!~
    现在我用mysql command line输入show variables like 'char%'时显示的是utf8,
    但我用php用以上命令做查询时,出现的是以下结果:
    character_set_client latin1 
    character_set_connection latin1 
    character_set_database utf8 
    character_set_filesystem binary 
    character_set_results latin1 
    character_set_server utf8 
    character_set_system utf8 
    character_sets_dir D:\web\mysql\share\charsets\ 
    collation_connection latin1_swedish_ci 
    collation_database utf8_general_ci 
    collation_server utf8_general_ci 
    completion_type 0 
    concurrent_insert 1 
    connect_timeout 10 
    控制台和php查询的结果怎么会不一样呢
      

  7.   

    你collate不要使用utf8_unicode_ci,改用utf8_general_ci试试呢。
    看看这个
      

  8.   

    php文件都是以utf8 no bom存储的,所以记录都是以utf8格式存入数据库的!而且我也检查过都utf8编码!
      

  9.   

    谢谢9楼的兄弟,你说的情况我也注意到了,我早已把pmodel字段换成utf8_general_ci可问题还是存在!
      

  10.   

    建议提供测试数据和测试用SQL语句。以确定你的问题到底是在数据库端还是在PHP端。
      

  11.   

    再次感谢9楼的兄弟,你提供的网址我仔细看了一下,虽然他的问题是输入一个多字节码,显示出多个不匹配的结果,而我现在的问题输入ascii码,会显示出不匹配的中文结果,但为我解决问题指出一方向!不过最后的贴子还是建义使用utf8_unicode_ci,看来要好好研究一下unicode编码了,等结贴的时候给你加分!~
      

  12.   

    非常感谢ACMAIN_CHM兄弟的持续关注,我换了台机重装了数据库,问题还是存在,你可以在你的机器里测试一下,在被搜索的字段里输入包含utf8编码'工'字的字符串,在搜索里输入'a',然后带中文'工'的字符串就会被搜出来!
    sql语句可以用:
      select * from product where model like '%a%'
    前提条件,表一定要是utf8编码,至于用哪种utf-8都可以!
    刚才9楼的兄弟提供的网址我看了,看来不是我一个人遇到这样的问题,只不过他用utf8_general_ci而不用utf8_general_ci就可以解决问题,而我现在用utf8_general_ci也不行! 
      

  13.   

    我用如下语句在mysql query browser 中做了测试,正常啊,没有显示‘工’的记录出现。show variables like 'char%';create table tx (
    id int primary key,
    f1 varchar(10)
    ) CHARACTER SET utf8 COLLATE utf8_unicode_ci ;insert into tx values (1,'工工');
    insert into tx values (2,'aa');
    insert into tx values (3,'问题还');select * from tx;select * from tx where f1 like '%a%';建议你检查一下你数据库中存放的到底是什么。
    mysql> select hex(f1) from tx;
    +--------------------+
    | hex(f1)            |
    +--------------------+
    | E5B7A5E5B7A5       |
    | 6161               |
    | E997AEE9A298E8BF98 |
    +--------------------+
    3 rows in set (0.00 sec)工的UTF码是  E5B7A5
      

  14.   

    太感谢了,还是ACMAIN_CHM厉害, 我用select hex(f1) from tx查了一下中文的全都不是utf8编码,但我在insert into之前我用bin2hex($inval)检查过,utf8完全正确,存入数据库之后,我又查询有问题的那一项,然后再bin2hex($outval),得到的与utf8编码也是完全一致的!而且我的html页面都设置了charset=utf-8,如果是其它编码应该显示乱码才对呀?
      

  15.   

    现在问题应该是在你的PHP端在提交数据的时候,没有正确通知PHP用的UTF8编码。在你写入数据库之前,用试一下
    mysql_query("set name 'utf8'"); 
    mysql_query("insert into tx values (10,'数据')")
    http://blog.csdn.net/ACMAIN_CHM/archive/2009/05/12/4174186.aspx
      

  16.   

    还有我用show variables like 'c%';显示的都是utf8啊,怎么会插入的是乱码,比如插入'工',hex()结果是:
    C3 A5 C2 B7 C2 A5
    这个是什么码,为什么读取后用bin2hex($outval)显示的是utf8正常编码E5 B7 A5;
    ACMAIN_CHM高手,另外两个贴已结贴并送上85分,希望笑纳,这个贴还有一点点疑问,希望能解答一下,然后再将分数一起奉上!~
      

  17.   

    关键是你插入记录时所使用的字符集,
    用SET NAMES UTF8后,
    再插入记录试试
      

  18.   

    读一下这篇贴子 http://blog.csdn.net/ACMAIN_CHM/archive/2009/05/12/4174186.aspx客户端的编码可以和数据库的编码不同,比较数据库是 UTF8 而你是 GB2312,那你首先要告诉MYSQL,我用的语言是GB2312, 这样,MYSQL会将读到的记录(GB2312)的转换成GB2312再发给你。
      

  19.   

    谢谢,不错的文章,我还有一点点疑问,就是我插入的如果不是utf8编码应该报错才对呀,类似这样的信息:
    Incorrect string value: '\xE5\xB7\xA5\xE7\xA8\x8B...'
    我在mysql command line client中直接insert into时就会出现上面类似的错误!
    但我在php中没有看到任何报错,我上面提到的数据中‘工’的编码到底是什么编码?
      

  20.   

    还有为什么我用bin2hex()后的结果和查询的字符串UTF8编码完全一致?而用hex(fl)后的结果去不是呢?
      

  21.   

    上面这个问题好象明白了,可能是因为提到html页面的时候已经转换成utf8编码,所以我用bin2hex()的结果才会和utf8一致,但如果是这样的话我就明白非utf8编码到页面的时候是怎么转换的?
      

  22.   

    是MySQL自动根据 character_set_client , character_set_results , 及column r charset 进行的转换