Case-Sensitive
使用區分大小寫的數據處理不區分大小寫的查詢
當涉及到區分大小寫的數據和不區分大小寫的查詢時,設計表或查詢有哪些實踐?
例如,我有一個
Products
存放家居用品的表,大概是因為我打算在客戶端上顯示這些數據,所以我想要原始名稱。如果其中一種產品被稱為“真空吸塵器”並且有人在數據庫中搜尋真空吸塵器,我不希望像“真空”這樣的術語找不到這個特定的真空吸塵器。
目前我正在使用 Postgres,所以我可能會擺脫
ILIKE
運營商,但如果數據庫系統不支持這種運營商,還有什麼替代方案?
SQL 文本和字元串數據有一個稱為“排序規則”的概念。排序規則定義字元集如何比較和排序。幾乎每個數據庫都有“區分大小寫排序規則”與“不區分大小寫排序規則”的概念。用於比較、搜尋和排序的排序規則可以在每個查詢的基礎上即時更改(通常在執行時成本很高)。更常見的是在開發過程中選擇排序規則並在數據庫/表/列級別定義,然後引擎將使用選擇的排序規則對字元串/文本進行搜尋/比較/排序。
如何定義要使用的排序規則的具體細節取決於您選擇的平台。
這取決於數據庫供應商。
對於 postgresql,使用數據庫類型 citext(不區分大小寫的文本)。避免使用 ILIKE,因為供應商不建議這樣做。
http://www.postgresql.org/docs/9.1/static/citext.html
http://www.depesz.com/2008/08/10/waiting-for-84-case-insensitive-text-citext/