Php 为什么西班牙语单词不能在全文索引中正确搜索与Excet匹配

Php 为什么西班牙语单词不能在全文索引中正确搜索与Excet匹配,php,mysql,laravel,full-text-search,Php,Mysql,Laravel,Full Text Search,我在食物搜索中使用了全文索引,并且在食物表中记录是多语言的,因此我使用“jamón”(西班牙语)食物进行搜索,但它是列表的搜索结尾,不显示第一个,显示其他英语(jamon食物)食物在列表的顶部,所以我怎样才能先搜索完全匹配的食物,然后再搜索其他食物,而不必在搜索查询中花费太多时间 我的代码是这样的 $food_data = Nutrition::whereRaw("MATCH(brand_with_name) AGAINST (? IN NATURAL LANGUAGE MODE)", [$it

我在食物搜索中使用了全文索引,并且在食物表中记录是多语言的,因此我使用“jamón”(西班牙语)食物进行搜索,但它是列表的搜索结尾,不显示第一个,显示其他英语(jamon食物)食物在列表的顶部,所以我怎样才能先搜索完全匹配的食物,然后再搜索其他食物,而不必在搜索查询中花费太多时间 我的代码是这样的

$food_data = Nutrition::whereRaw("MATCH(brand_with_name) AGAINST (? IN NATURAL LANGUAGE MODE)", [$item])
            ->with('guNutrition', 'esNutrition')
            ->limit($per_page)
            ->offset($off_set)
            ->get();
我的应用程序使用了Laravel和Mysql。
我尝试使用下面的代码,但是它花费了太多的时间,并且不能正确地使用西班牙语(首先没有显示精确的匹配)。只有用英语才能正常工作

$food_data = Nutrition::whereRaw("MATCH(brand_with_name) AGAINST (? IN NATURAL LANGUAGE MODE)", [$item])
                            ->select('*',\DB::raw('CASE WHEN brand_with_name = "' . $item . '" THEN 1 ELSE 0 END AS score'),\DB::raw('MATCH(brand_with_name) AGAINST ("' . $item . '") AS score2'))
                            ->with('guNutrition', 'esNutrition')
                            ->orderBy('score', 'DESC')
                            ->orderBy('score2', 'DESC')
                            ->limit($per_page)
                            ->offset($off_set)
                            ->get();

该问题是由于不适当的
字符集和排序规则造成的。如果对该字段的搜索总是对重音敏感,则将该字段的排序规则声明为utf8_bin(这将比较utf8编码的字节是否相等),或者使用区分重音字符和非重音字符的特定于语言的排序规则

在我的版本(MySql 5.0)中,没有任何utf8字符集可用于不区分大小写、区分重音的搜索。utf8的唯一区分重音的校对是utf8\u-bin。但是,它也区分大小写

例:

SELECT * FROM `words` WHERE LOWER(column) = LOWER('aBád') COLLATE utf8_bin