2012-04-02 16 views
9

Chcę uzyskać zawartość z wiersza w bazie danych i porównać małą wersję nim do małymi wersji wpisałeś użytkownika, aby sprawdzić, czy istnieje w bazie danych:MySQL małe porównanie danych

"SELECT `id` FROM `user_accounts` WHERE `username` = '".strtolower($username)."'" 

Jak mogę uzyskać, że nazwa użytkownika ma małe litery z mysql?

+2

'LOWER (nazwa użytkownika)' Przejrzyj [funkcje MySQL string] (http://dev.mysql.com/doc/refman/5.0/en/string-functions.html) –

Odpowiedz

8

Jeśli naprawdę chcesz sprawę nie kwestia to należy ustawić sortowanie kolumny aby być rozróżniana wielkość liter.

mysql> SET NAMES 'utf8' COLLATE 'utf8_unicode_ci'; 
Query OK, 0 rows affected (0.03 sec) 

mysql> SELECT 'foobar' = 'FoObAr'; 
+---------------------+ 
| 'foobar' = 'FoObAr' | 
+---------------------+ 
|     1 | 
+---------------------+ 
1 row in set (0.01 sec) 

mysql> SELECT 'fOoBaR' = 'FoObAr'; 
+---------------------+ 
| 'fOoBaR' = 'FoObAr' | 
+---------------------+ 
|     1 | 
+---------------------+ 
1 row in set (0.00 sec) 

mysql> SELECT 'fOoBaR' = 'FoObAz'; 
+---------------------+ 
| 'fOoBaR' = 'FoObAz' | 
+---------------------+ 
|     0 | 
+---------------------+ 
1 row in set (0.00 sec) 
+0

Myślę, że domyślna instalacja mysql przy użyciu myisam jest już niewrażliwa na wielkość liter – iWantSimpleLife

+1

@iWantSimpleLife: Sugerujesz, że zakładamy, że pytający ma taką samą konfigurację, na którą patrzysz? A co, jeśli przejdą do innego systemu, który miał zmienione wartości domyślne? –

+0

To nie jest poprawne, ponieważ może wpłynąć na przyszłe wstawki, '' 'lower (' username') '' 'jest poprawną odpowiedzią –

-1
"SELECT `id` FROM `user_accounts` WHERE lower(`username`) = '".strtolower($username)."'" 
+0

To ta sama odpowiedź –

2
$query = "SELECT `id` 
      FROM `user_accounts` 
      WHERE LOWER(`username`) = '".strtolower($username)."'" 
1

Można użyć następującej kwerendy, aby to zrobić:

$myquery = "SELECT `id` FROM `user_accounts` WHERE 
      LOWER(`username`) = '".strtolower($username)."'" 

LOWER jest funkcja SQL, który zamienia wszystkie znaki na małe litery, tak jak PHP strtolower

na Uwaga boczna: Powinieneś uciec $username przy użyciu mysql_real_escape_string, aby uniknąć możliwego iniekcji sql w tym punkcie.

1

Jak odpowiedział powyżej Idealnie to powinno działać,

$query = "SELECT `id` 
      FROM `user_accounts` 
      WHERE LOWER(`username`) = '".strtolower($username)."'"; 

ale to nie będzie działać, jeśli „username” kolumna w tabeli „user_accounts” jest zdefiniowany jako VARBINARY. Powodem jest VARBINARY wymaga, aby dane były rozróżniane wielkości liter

2

Korzystanie z jednego z powyższych zapytań powinno działać dobrze, ale UWAGA! Jeśli twoja kolumna username jest zindeksowana, użycie LOWER spowoduje, że twoje zapytanie nie będzie używać tego indeksu.

0

Wystarczy użyć:

SELECT `id` 
FROM `user_accounts` 
WHERE LOWER(`username`)='".strtolower($username)."'"; 

lub użyj

SELECT `id` 
FROM `user_accounts` 
WHERE LCASE(`username`)='".strtolower($username)."'"; 

oba będą działać tak samo.