2011-05-09 90 views
6

她是我的問題,我想它是非常基本的。如何使PHP/MySQL中的SELECT不區分大小寫?

我想在數據庫中查找是否存在行。繼承人我的代碼:

$req="SELECT * FROM INSTITUTS WHERE inst_name='$fc_inst'"; 
$result=mysql_query($req) or die ('Erreur :'.mysql_error()); 
if (mysql_num_rows($result)){ 
echo ' name exist'; 
} 
else { 
echo ' does not exist.'; 
} 

Probleme,當IMM找「測試」,它說並不存在,即使我有「測試」在我的數據庫。

+2

默認情況下,MySQL的查詢不區分大小寫,除非基礎表具有區分大小寫的整理集。 – 2011-05-09 15:04:09

回答

9

您可以使用LIKE

WHERE foo LIKE 'bar' 

或者你可以施放小寫:

WHERE LOWER(foo) = LOWER("bar") 

,你知道,數據庫中的所有的數據都已經下套管與LOWER()的例子是最有效的,那麼你可以執行:

WHERE foo = LOWER("bar") 

這將是比LIKE更便宜的比較如果你可以小寫數據庫中的所有數據。

+1

我相信在某些地區,一些信息**必須是**大寫或混合大小寫,並且不能全部小寫 – Neal 2011-05-09 14:22:06

10

嘗試使用LIKE代替=

$req="SELECT * FROM INSTITUTS WHERE `inst_name` LIKE '$fc_inst'"; 
+0

這會起作用嗎?他不應該在PHP代碼中使用Lower()和strtolower()? – 2011-05-09 14:13:25

+0

@Vash,這是一個問題或陳述? – Neal 2011-05-09 14:13:57

+0

這應該是問題。 – 2011-05-09 14:16:22

0

嘗試:

$req="SELECT * FROM INSTITUTS WHERE UCASE(inst_name)=UCASE('$fc_inst')"; 
$result=mysql_query($req) or die ('Erreur :'.mysql_error()); 
if (mysql_num_rows($result)){ 
echo ' name exist'; 
} 
else { 
echo ' does not exist.'; 
} 
+0

謝謝大家。我很欣賞 – 2011-05-09 14:35:01

4

它也可能是您的表分頁設定

的問題。此CREATE語句會迫使你選擇的查詢使用LIKE運算符時要區分大小寫甚至:

CREATE 
    table instituts (inst_name VARCHAR(64)) 
    CHARACTER SET latin1 COLLATE latin1_general_cs; 

而這一次將確保案件-insensitivity:

CREATE 
    table instituts (inst_name VARCHAR(64)) 
    CHARACTER SET latin1 
+1

這可能是最明智的答案。 – 2011-05-10 10:53:10

3

您可以使用「喜歡」解決這個問題的其他人告訴你,它瞭解區分大小寫由數據庫中的排序規則確定非常重要。例如,如果您選擇一個排序規則utf8_general_ci ...最後的「ci」表示「不區分大小寫」,因此您將來進行的比較將不區分大小寫。

簡而言之:您必須小心您選擇的排序規則。

3

可以使用MD5()比較,如果你想有一個區分大小寫選擇:

$req="SELECT * FROM INSTITUTS WHERE MD5(inst_name)=MD5('$fc_inst')"; 
當然

你消耗服務器CPU的一點點,但它的,而不是那些無聊的排序規則簡單。

+0

*「服務器的cpu的一小部分」*可能表示CPU數小時,如果表很大並且查詢頻繁運行。 – 2011-08-13 21:25:09

+0

;-)當然是! – 2011-08-16 11:52:55

+0

好主意md5 ... grats和非常感謝 – KingRider 2015-05-13 14:48:42