1
我有一个简单的搜索我的laravel项目,当我输入字符'ñ'并提交搜索,表中的所有行都检索。当输入字符ñ进入搜索,它从数据库检索所有行
查询方式简单,它仅使用一个其中:其中( '标题', '喜欢', “%$搜寻准则%”)
我的DB是utf8_unicode_ci
这是为什么?发生
我有一个简单的搜索我的laravel项目,当我输入字符'ñ'并提交搜索,表中的所有行都检索。当输入字符ñ进入搜索,它从数据库检索所有行
查询方式简单,它仅使用一个其中:其中( '标题', '喜欢', “%$搜寻准则%”)
我的DB是utf8_unicode_ci
这是为什么?发生
utf8_general_ci排序规则既不区分大小写又不区分重音,因此您的查询将返回包含字母'n'的所有行,大写或小写,加重或不加重。请参阅http://dev.mysql.com/doc/refman/5.6/en/charset-collation-effect.html了解归类如何影响搜索和比较。
您可以通过在SQL语句末尾添加'COLLATION new_collation'来更改给定SQL语句的排序规则。因此,这应该为你工作:
SELECT * FROM table WHERE title LIKE '%ñ%' COLLATION utf8_bin;
我的整理是utf8_unicode_ci不utf8_general_ci。 另一方面,应该更好地让我的数据库更改为排序规则utf8_bin? – user3173855 2014-10-30 17:00:36
最好使用对数据库中的ORDER BY子句有意义的排序规则,即。 utf8_general_ci,并且如果您想要完全匹配,则只需在特定语句中更改排序规则。通过这种方式,如果应用程序显示列表,它们将按照逻辑顺序排列在最终用户的屏幕上。 – 2014-10-30 20:01:08