2012-06-25 34 views
3

在很多編程語言有基本等於運營商,會看到兩個字符串的文本是平等的:MySQL嚴格等於運營商?

if ("Hi" == "hi") { 
    //this code runs 
} 

但也有嚴格等於運算符:

if ("Hi" === "hi") { 
    //this code will never run 
} 

有在MySQL中的上述代碼片段的等效運算符? =運營商不會削減它。如果我運行:

SELECT * FROM users WHERE name = 'john'; 

MySQL將返回行數爲John,大寫「J」。

謝謝你的時間。

+0

在SQL中,字符串中的平等檢查通常不區分大小寫。 –

+0

你想要的是一個區分大小寫的排序規則。閱讀本文:[字符串搜索區分大小寫](http://dev.mysql.com/doc/refman/5.5/en/case-sensitivity.html) –

+0

[MySQL區分大小寫的字符串比較?](http: //stackoverflow.com/questions/5629111/mysql-case-sensitive-string-comparison) –

回答

10

可以使用COLLATE操作員將列轉換爲區分大小寫的歸類:上區分大小寫

SELECT * FROM users WHERE name LIKE 'john' COLLATE utf8_bin 

MySQL的documentation

+0

嗯......我的表排序規則設置爲'latin1_swedish_ci'。運行上述代碼示例'#1253時出現此錯誤 - COLLATION'latin1_general_cs'對CHARACTER SET'utf8''無效 –

+0

然後嘗試使用'utf8_bin'整理。 –

+0

是的,我試過了,沒有用。這裏是創建我使用CREATE TABLE IF NOT EXISTS用戶(/ *一些列,索引和主鍵* /)的表的SQL創建的表ENGINE = MyISAM DEFAULT CHARSET = latin1;' –

2

可以使用STRCMP

SELECT * FROM users WHERE STRCMP(name, 'john') = 0; 

注:

  • 0 =相同
  • -1 =第一元件更小的
  • 1 =第一元件更大

必須的使用,如果你使用MySQL整理4.0+(STRCMP不再區分大小寫)

  • COLLATE utf8_general_ci =不區分大小寫(CI)
  • COLLATE utf8_general_cs =區分大小寫(CS)
+0

雖然這不能使用任何索引。 –

+1

'SELECT STRCMP('John','john');'在我的機器中返回'0'。 –

+0

對,剛纔看到這個函數使用字段collat​​es,那麼我們仍然必須指定'COLLATE utf8_general_cs' – zessx