2016-09-30 51 views
2

我得到這個代碼:如何搜索MySQL中的確切字符串值?

select * from locality WHERE name ="ISTASYON" 

這與MySQL完美。問題來了,當我嘗試執行,但結果不正確

結果代碼:

28BAF9346A41E4E4E0501AAC4524363B 0  iSTASYON 
402881a4523b52d201523b6c2afb4166 0  İSTASYON 
402881a4523b52d201523b6c38b7417c 0  İSTASYON 
402881a4523b52d201523baa9faf0092 0  İSTASYON 
402881a4523b52d201523baab059009f 0  İSTASYON 
402881a4523b52d201523baad01a00b7 0  İSTASYON 
58441bc4c054447ebe1cddbfeef958b5 0  ISTASYON 
fa7fb88d1d4c41feb497b08f42066c82 1 2016-04-19 09:53:41.000000 İSTASYON 

我的問題是結果包含ISTASYON,İSTASYON,ıSTASYON,iSTASYON但我只想ISTASYON

如何解決這個問題?

+0

您是否使用不區分大小寫的字符集? –

+2

[我怎樣才能在MySQL上對SQL區分大小寫的字符串進行比較?](http://stackoverflow.com/questions/5629111/how-can-i-make-sql-case-sensitive-string-comparison-on -mysql) – Shadow

+0

在重複問題中獲得最多讚譽的第二個答案是最簡單的解決方案 – Shadow

回答

1

可以使用COLLATEBINARY運營商強制二進制比較:

SELECT * FROM locality WHERE name COLLATE utf8_bin = "ISTASYON" 

SELECT * FROM locality WHERE BINARY name = "ISTASYON" 

如果你想總是以這種方式被處理的柱,用二進制聲明它排序規則。
查看docs瞭解更多信息。

+0

非常感謝 –

0

默認的字符集和排序規則是latin1和latin1_swedish_ci,所以非二進制字符串比較默認情況下不區分大小寫。這意味着如果使用col_name LIKE'i%'搜索,將獲得以I或i開頭的所有列值。要使此搜索大小寫敏感,請確保其中一個操作數具有區分大小寫或二進制排序規則。

col_name COLLATE latin1_general_cs LIKE 'i%' 
col_name LIKE 'i%' COLLATE latin1_general_cs 
col_name COLLATE latin1_bin LIKE 'i%' 
col_name LIKE 'i%' COLLATE latin1_bin 
0

SELECT * FROM地方均二進制名稱= 「ISTASYON」

SELECT * FROM地方WHERE name = BINARY 「ISTASYON」

0

計劃A:這將是區分大小寫和區分變音:

將該列更有效(設置後)爲utf8_bin(或utf8mb4_binlatin1(和latin1_bin)將不是足夠因爲土耳其字符。

的設置是

ALTER TABLE tbl MODIFY COLUMN ... COLLATION utf8_bin ...; 

注意:如果你也想做情況摺疊和/或口音在其他情況相同的列(S)剝離,這將傷害那些情況。

B計劃:這解決了無點ı和一些其他的土耳其特質。

COLLATION utf8_turkish_ci(或utf8mb4_turkish_ci)對待這些等於:I=ı,然後將以下內容視爲不同且稍後,但均等:i=Ì=Í=Î=Ï=ì=í=î=ï=Ī=ī=Į=į=İÜ=üU之後和V之前。同樣Ğ=ğG之後和H之前。有關更多詳細信息,請參閱utf8 collations

1

您可以使用這樣的查詢select,我也使用它,它是有幫助的。

Select * from `users` where username COLLATE latin1_general_cs LIKE '%$email%'