2013-10-03 42 views
0

我在面向大小寫的搜索中遇到了問題。我使用以下環境: -在django-tastypie-mysql中遇到大小寫敏感的搜索問題

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

整理/字符編碼不支持不區分大小寫的搜索。所以,如果我寫

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

那麼它不會給輸出「計算器」或其他組合。

當我使用的Django Tastypie過濾: -

company_name__icontains = 'StackOverflow' 

,它的內部閃光相同的SQL查詢,因此它不會給出正確的答案。

如果我用簡單的MySQL查詢,然後我可能會使用:

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

但不能寫入過濾器在Django的Tastypie上述溶液。

我找到了一個替代的方式來解決使用正則表達式的問題: -

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中爲不區分大小寫搜索構建過濾器。

感謝

回答

1

我在數據庫級別改變character_encoding。其中支持不區分大小寫的搜索。

我跑以下命令: -

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