Django MySQL查詢不區分大小寫問題

2022-05-01 14:48:08 字數 960 閱讀 4796

最近發現乙個現象是測試環境的 sqlite 是可以區分大小寫的。

就是說python

# sqlite 環境

>>> company.objects.filter(name='teambition')

]>

>>> company.objects.filter(name='teambition')

]>

而到了線上的 mysql 就不區分大小寫了。

python

# mysql 環境

>>> company.objects.filter(name='teambition')

>, ]>]

獲得到兩個例項。 但這樣不是我預想的。

起初我查詢了官方文件, 得到指引使用__exact方法. 即:

python

company.objects.filter(name__exact='teambition')
但是無效!!!

由於測試環境的 sqlite 沒有問題, 所以懷疑在 mysql 的配置上面。 原來是字符集校對規則的問題,utf8_general_ci不區分大小寫, 可以改成utf8_bin(將字串中的每乙個字元用二進位制資料儲存,區分大小寫。) 或者utf8_general_cs(cs為case sensitive的縮寫,即大小寫敏感).

但是, 由於我程式段沒有運算元據庫的許可權, 所以沒有去 alter 已經有的 table。 我找到另外的一種解決方式

通過 django orm 的extra, 在匹配語句上面加上binary來區分大小寫.

python

if settings.env == 'prod':

# 線上的 mysql 資料庫加上 binary

else:

# sqlite 不做處理

Postgresql查詢時不區大小寫

postgresql提供有強大的正規表示式系統,可以在資料庫級別實現模糊查詢。正規表示式匹配操作符 操作符描述例子 匹配正規表示式,大小寫相關 thomas thomas.匹配正規表示式,大小寫無關 thomas thomas.不匹配正規表示式,大小寫相關 thomas thomas.不匹配正規表示...

自定義Oracle replace函式不區分大小寫

在網上找的一函式,後來發現有點小問題,自己改了一下。function strreplace n str in varchar2,n search in varchar2,n replace in varchar2 return varchar2 is v result varchar2 4000 v...

hive 簡單查詢不走mapreduce

在hadoop生態圈中屬於資料倉儲的角色。他能夠管理hadoop中的資料,同時可以查詢hadoop中的資料。本質上講,hive是乙個sql解析引擎。hive可以把sql查詢轉換為mapreduce中的job來執行。hive有一套對映工具,可以把sql轉換為mapreduce中的job,可以把sql中...