【问题标题】:Mysql + PHP Search word without utf8没有utf8的Mysql + PHP搜索词
【发布时间】:2016-06-27 18:52:18
【问题描述】:

我遇到了 mysql 搜索 LIKE 的问题 例如,在数据库表城市中,我记录了“Rīga”
您如何在数据库中看到单词“Rīga”有“ī”而不是“i”字母。
即使我用普通的“i”字母写,是否可以进行搜索?
因为这个变体不起作用

SELECT * FROM `city` WHERE `title` LIKE '%Riga%'

【问题讨论】:

    标签: php mysql search


    【解决方案1】:

    【讨论】:

    • 是的,我终于做到了,谢谢 :) $q1 = mq($db2, "SELECT * FROM city WHERE title LIKE _utf8'%ka%' collate utf8_general_ci"); 这解决了所有问题 :)
    • 很抱歉发了两次帖子,但我遇到了另一个问题。如果我写 ka 它的工作,但如果我写超过 2 个字母它什么都没有显示,例如“kar”它什么都不显示,但是当“ka”它显示 2 条记录时,这是为什么呢?
    • 我必须说这很奇怪。我对这种行为没有最终答案:也许是因为带有奇怪口音的字母不是最后一个?试试%ka%r% 之类的东西,看看会发生什么。
    【解决方案2】:

    在执行查询之前,您应该使用与数据库相同的连接编码。

    如果您使用 PDO,只需将连接编码设置为:

    $encoding = "utf8"; //replace this value with the character encoding you're using
    $pdo = new PDO("mysql:host=host;dbname=my_db;charset=$encoding", $user, $pass);
    

    如果您使用的是 MYSQLI,请使用mysqli_set_charset

    $encoding = "utf8"; //Use your encode here
    $con = mysqli_connect("host",$user,$pass,"my_db");
    mysqli_set_charset($con, $encoding);
    

    编辑~

    您可能还需要在数据库中使用不区分重音的排序规则 (UTF8_GENERAL_CI)。 我相信您的问题已经在MySQL charsets and collations: accent insensitive doesn't work@ 帖子中解决了

    【讨论】:

    • 不,它不工作。可能我解释得不好。我想做一个类似谷歌搜索的系统。例如,在数据库中有 2 条记录 Kārsava 和 Kandava 如果我进行搜索“SELECT * FROM city WHERE title LIKE '%ka%'”;它只返回 Kandava,但我希望他也返回 Kārsava。我尝试了您的解决方案,但没有奏效
    • 已更新。感谢参考@Sylter 的回答,但使用 mysql :)
    猜你喜欢
    • 2014-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-18
    • 2013-12-19
    • 1970-01-01
    • 1970-01-01
    • 2014-02-13
    相关资源
    最近更新 更多