周大胖子 发表于 2019-4-11 20:10:37

mysql 中文快捷搜索报错

本帖最后由 周大胖子 于 2019-4-12 14:37 编辑

现象1
    在快捷搜索时:
      搜索栏添加条件为中文 则没有返回结果,在搜索栏添加英文与数字 则会有返回结果;

    测试1: 在已知的phpmyadmin 中 输入 SELECT * FROM `xy_jiandi` WHERE "name" like '%肖勇%';
      结果正确;

    测试2: 已更改 my.ini添加了两句编码:[已重启]
      character-set-server = utf8
      character_set_client = utf8

    测试3: 已知 数据库字符集正确 、 表字符集正确、字段值字符集正确、都为utf-8 ;

    测试4:在服务器上单独写一个 like 中文搜索 得到的结果是正确的;


      $name = '黄俊';
            $where = array(
             'name'=>array(
                // 'like','黄俊'
                'like','%'.$name.'%'
             )
            );
      $dbname = 'jiandi';
      $req = M($dbname)->where( $where )->field('id,name,cid')->select();

    测试5:怀疑是接收值的问题

            $name = $_REQUEST['name'];

            $where = array(
             'name'=>array(
                'like','%'.urldecode(trim($name)).'%'
             )
            );
            $dbname = 'jiandi';
            $req = M($dbname)->where( $where )->field('id,name,cid')->select();

          排除【所用函数、转化、接收到后的中文的变化 问题】

         怀疑是 在 phone 等字段搜索中文时导致出错


    搜索语句: SELECT * FROM `xy_jiandi` WHERE "name" like '%肖勇%';

                SELECT * FROM `xy_jiandi` WHERE name like '%常%';
"_complex" => array (
            "cid"=>array("like" , "%肖勇%" ),
            "name"=> array("like" , "%肖勇%" ),
            "username"=> array("like" , "%肖勇%" ),
            "phone"=> array("like" , "%肖勇%" ),
            "laiyuan"=> array("like" , "%肖勇%" ) ,
            "jsdate"=> array("like" , "%肖勇%" ),
            "_logic"=>"or"
      )

    经过测试得知: 当jsdate 被注释时 是可以进行查询的;
    已知 jsdate 是 date 的数据
    度娘说:mysql 5.5 以上版本 date 类型数据 在使用 'like','%中文%' 是不被允许的;
    需要再加一个申明
参考网址:https://blog.csdn.net/u010416101/article/details/63766304



页: [1]
查看完整版本: mysql 中文快捷搜索报错