老莫的笔记本  
  
查看: 1138|回复: 0

mysql 中文快捷搜索报错

[复制链接]

662

主题

878

帖子

5133

积分

超级版主

Rank: 8Rank: 8

积分
5133
发表于 2019-4-11 20:10:37 | 显示全部楼层 |阅读模式
本帖最后由 周大胖子 于 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



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表