2011-04-22 214 views
3

在我的數據庫utf8_general_ci中,99.99%的搜索應該不區分大小寫。現在有一個特定的情況,我需要以區分大小寫的方式找到一些數據。該字段是一個varchar字段,我通常會搜索不區分大小寫的字段。如何在不區分大小寫的MySQL數據庫上執行區分大小寫的搜索?

我的問題是:我可以在通常不區分大小寫的字段上執行區分大小寫的搜索嗎?

回答

6

SELECT * FROM轉換(PAGETITLE使用LATIN1),其中整理utf8_ = '東西'

頁面,我發現this answer足夠的描述:)

+2

回答,但是(未知的排序規則:'utf8_')沒有工作,所以我將它改爲'FROM \'table \'WHERE convert(\'collumn \ '使用latin1)COLLATE latin1_general_cs LIKE'%wOrd'' – Moak 2011-04-22 08:08:28

+0

其實我只是從答案中複製它...僅供參考 – 2011-04-22 08:12:06

+0

它會導致性能問題,但因爲您只在0.01%的情況下使用它:)我不認爲這對你來說很重要......如果你找到更好的解決方案,更新我們之間。 – 2011-04-22 08:45:02

4

你必須使用COLLATE操作

OR

如果你想要一個列總是要 區分大小寫的方式處理, 改變其在搜索查詢中使用的操作數的排序規則用區分大小寫或 二進制排序規則來聲明它。

這裏http://dev.mysql.com/doc/refman/5.0/en/case-sensitivity.html

+0

這看起來不錯,但是mysql手冊並不是很清楚在哪裏應用這個'COLLATE'到一個表中的SELECT語句 – Moak 2011-04-22 07:59:07

+0

SELECT name FROM table WHERE CONVERT(name USING utf8)COLLATE utf8_general_cs LIKE「%anne% 「;請注意_cs後綴。 – 2011-04-22 08:07:43

+0

'#1273 - 未知的排序規則:'utf8_general_bin''謝謝,但我使用latin1,然後它的工作 – Moak 2011-04-22 08:11:34

3

見我建議改變排序類型,使之成爲區分大小寫,然後改變的其他情況下,99.99%的代碼。有關更改現場檢查的情況下信息:http://dev.mysql.com/doc/refman/5.0/en/case-sensitivity.html

您可以使用LOWER()UPPER()功能在SQL一次字段類型設置爲區分大小寫爲不敏感的搜索規範的情況。

+1

請注意,如果存在,LOWER/UPPER將使列上的索引不可用。 – 2011-04-22 07:41:41

+0

這並不能真正回答我的問題。爲了清晰起見,我編輯了我的問題。恐怕在這個階段沒有辦法選擇返回並更改所有代碼,並且我的專欄已被編入索引並且需要變得不敏感,所以OMG Ponies對我來說是一個真正的風險。 – Moak 2011-04-22 07:50:07

+0

我看到了,在這種情況下,我會從@ ankur.singh – 2011-04-22 07:59:14

1

您可以查詢區分大小寫, 例如,如果您想要檢查用戶名和密碼:

Select * from TableName Where WHERE [email protected] COLLATE SQL_Latin1_General_CP1_CS_AS AND [email protected] COLLATE SQL_Latin1_General_CP1_CS_AS 

它檢查用戶名和密碼,如果它們爲真(區分大小寫),則返回值。