面对django-tastypie-mysql中区分大小写的搜索问题

时间:2013-10-03 06:33:28

标签: mysql django tastypie

我在案例不敏感搜索方面遇到问题。我使用以下环境: -

Database: MySQL
Collation/Character Encoding: utf8bin
Framework: Django-Tastypie

归类/字符编码不支持不区分大小写的搜索。所以,如果我写

SELECT .... WHERE company_name LIKE '%StackOverflow%';

然后它不会为'STACKOVERFLOW'或其他组合提供输出。

当我使用Django-Tastypie过滤时: -

company_name__icontains = 'StackOverflow'

它在内部触发相同的SQL查询,因此它没有给出正确的答案。

如果我使用简单的MySQL查询,那么我可能会使用:

SELECT .... WHERE UPPER(company_name) like upper('%StackOverflow%');

但是无法在Django-Tastypie中为上述解决方案编写过滤器。

我找到了一种使用Regex解决问题的替代方法: -

company_name__iregex = '(S|s)(T|t)(A|a)(C|c)(K|k)(O|o)(V|v)(E|e)(R|r)(F|f)(L|l)(O|o)(W|w)'

但是,方法很慢。

有人可以提供解决方案,以便我可以在Tastypie中为Case Insensitive Search构建过滤器。

由于

1 个答案:

答案 0 :(得分:1)

我在数据库级别更改了字符编码。哪个支持大小写不敏感搜索。

我运行了以下命令: -

alter table {{table_name}} convert to character set utf8 collate utf8_general_ci;