2012-04-02 13 views
9

Quiero obtener el contenido de una fila en la base de datos y comparar la versión en minúsculas de la misma a una versión minúscula de una llave de entrada de usuario para comprobar si existe en la base de datos:MySQL minúsculas comparar los datos

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

¿Cómo puedo obtener el nombre de usuario en minúsculas de mysql?

+2

'LOWER (username)' Revise las [funciones de cadena de MySQL] (http://dev.mysql.com/doc/refman/5.0/en/string-functions.html) –

Respuesta

8

Si realmente quieres caso de no importa entonces usted debe configurar la intercalación de la columna para que sea sensible a las mayúsculas.

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

Creo que la la instalación predeterminada de mysql usando myisam es insensible a las mayúsculas/minúsculas – iWantSimpleLife

+1

@iWantSimpleLife: ¿Sugiere que supongamos que el asker tiene la misma configuración que usted ha analizado? ¿Y qué pasa si van a otro sistema que ha cambiado los valores predeterminados? –

+0

Eso no es correcto porque puede afectar inserciones futuras, '' 'inferior (' nombre de usuario') '' 'es la respuesta correcta –

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

Es la misma respuesta –

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

Se puede utilizar la siguiente consulta para hacerlo:

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

LOWER es la función de SQL que convierte todos los caracteres a minúsculas, al igual que de PHP strtolower

En una nota al margen: Debería escapar al $username usando mysql_real_escape_string para evitar una posible inyección de SQL en ese punto.

1

como respondida anteriormente, idealmente esto debería funcionar,

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

pero no va a funcionar si la columna "nombre de usuario" en la tabla "user_accounts" se define como VARBINARY. El motivo es VARBINARIO requiere que los datos sean sensibles a las mayúsculas/minúsculas

2

El uso de una de las preguntas anteriores debería funcionar bien, pero ¡ATENCIÓN! Si tiene indexada su columna de nombre de usuario, usar LOWER en ella lo hará para que su consulta no use ese índice.

0

Utilice simplemente:

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

o uso

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

Tanto funcionará de la misma.

Cuestiones relacionadas