2009-10-28 16 views
2

我在我的數據庫中有一個varchar字段,用於兩個截然不同的事情。在一種情況下,我使用它來區分大小寫,以確保不會插入重複項。爲了達到這個目的,我將比較設置爲二進制。但是,我希望能夠以不區分大小寫的方式搜索相同的列值。有沒有什麼辦法可以做到這一點,而不是簡單地創建一個冗餘列與排序,而不是二進制?同時實現二進制和排序規則的屬性

回答

2
CREATE TABLE t_search (value VARCHAR(50) NOT NULL COLLATE UTF8_BIN PRIMARY KEY); 

INSERT 
INTO t_search 
VALUES ('test'); 

INSERT 
INTO t_search 
VALUES ('TEST'); 

SELECT * 
FROM t_search 
WHERE value = 'test' COLLATE UTF8_GENERAL_CI; 

第二個查詢將返回兩行。

但是,請注意,任何與COLLATE適用於它具有最低的可壓縮性。

這意味着它value將被轉換爲UTF8_GENERAL_CI爲對比的目的,而不是反過來,這意味着在value該索引將不會被用於搜索和查詢的條件將不優化搜索。

如果您在不區分大小寫的搜索時需要良好性能,則應該創建一個不區分大小寫的排序規則的附加列,將其索引並用於搜索。