¿Alguien puede decirme si una SELECT
consulta MySQL distingue mayúsculas o minúsculas por defecto? Y si no, ¿qué consulta tendría que enviar para poder hacer algo como:
SELECT * FROM `table` WHERE `Value` = "iaresavage"
Donde en realidad, el valor real de Value
es IAreSavage
.
'value' in ('val1', 'val2', 'val3')
Respuestas:
No distinguen entre mayúsculas y minúsculas , a menos que haga una comparación binaria .
fuente
Puede poner en minúscula el valor y el parámetro pasado:
Otra (mejor) forma sería usar el
COLLATE
operador como se dice en la documentaciónfuente
SELECT
declaración usandoCOLLATE
entonces?LOWER()
o unaCOLLATE
cláusula arbitraria puede omitir por completo un índice y, con el tiempo, a medida que su tabla crezca, esto puede tener consecuencias drásticas en el rendimiento. Probablemente estos son los nombres de usuario que estás buscando. Utilice una clasificación sin distinción entre mayúsculas y minúsculas y agregue un índice único a la columna. UseEXPLAIN
para confirmar que se está utilizando el índice.USO BINARIO
Esta es una selección simple
SELECT * FROM myTable WHERE 'something' = 'Something'
= 1
Esta es una selección con binario
SELECT * FROM myTable WHERE BINARY 'something' = 'Something'
o
SELECT * FROM myTable WHERE 'something' = BINARY 'Something'
= 0
fuente
Las comparaciones no distinguen entre mayúsculas y minúsculas cuando la columna usa una clasificación que termina con
_ci
(como la clasificación predeterminadalatin1_general_ci
) y distinguen entre mayúsculas y minúsculas cuando la columna usa una clasificación que termina con_cs
o_bin
(como las clasificacionesutf8_unicode_cs
yutf8_bin
).Comprobar colación
Puede verificar su servidor , base de datos y colaciones de conexión usando:
y puede verificar la clasificación de su tabla usando:
Cambiar colación
Puede cambiar la clasificación de su base de datos, tabla o columna a algo sensible a mayúsculas y minúsculas de la siguiente manera:
Sus comparaciones ahora deben ser sensibles a mayúsculas y minúsculas.
fuente
La comparación de cadenas en la frase WHERE no distingue entre mayúsculas y minúsculas. Podrías intentar comparar usando
o
y obtendrás el mismo resultado . Ese es el comportamiento predeterminado de MySQL.
Si desea que la comparación distinga entre mayúsculas y minúsculas , puede agregar
COLLATE
así:Ese SQL daría un resultado diferente con este: DONDE
colname
COLLATE latin1_general_cs = 'keyword'latin1_general_cs
es una clasificación común o predeterminada en la mayoría de las bases de datos.fuente
La intercalación que elija establece si distingue entre mayúsculas y minúsculas o no.
fuente
El valor predeterminado no distingue entre mayúsculas y minúsculas, pero la siguiente cosa más importante que debe observar es cómo se creó la tabla en primer lugar, porque puede especificar mayúsculas y minúsculas cuando crea la tabla.
El siguiente script crea una tabla. Observe en la parte inferior que dice "COLLATE latin1_general_cs". Eso cs al final significa mayúsculas y minúsculas. Si desea que su tabla no distinga entre mayúsculas y minúsculas, puede dejar esa parte fuera o usar "COLLATE latin1_general_ci".
Si su proyecto es tal que puede crear su propia tabla, entonces tiene sentido especificar su preferencia de mayúsculas y minúsculas cuando cree la tabla.
fuente
SQL Select no distingue entre mayúsculas y minúsculas.
Este enlace puede mostrarle cómo hacer mayúsculas y minúsculas: http://web.archive.org/web/20080811231016/http://sqlserver2000.databases.aspfaq.com:80/how-can-i-make-my- sql-queries-case-sensitive.html
fuente
Probar con:
fuente
Tenga en cuenta también que los nombres de tabla distinguen entre mayúsculas y minúsculas en Linux a menos que establezca la
lower_case_table_name
directiva de configuración en 1 . Esto se debe a que las tablas están representadas por archivos que distinguen entre mayúsculas y minúsculas en Linux.Especialmente tenga cuidado con el desarrollo en Windows que no distingue entre mayúsculas y minúsculas y que se implementa en la producción donde está. Por ejemplo:
contra la tabla myTable tendrá éxito en Windows pero fallará en Linux, de nuevo, a menos que se establezca la directiva mencionada anteriormente.
Referencia aquí: http://dev.mysql.com/doc/refman/5.0/en/identifier-case-sensitivity.html
fuente
lower_case_table_name
como se especifica en la respuesta que estamos comentandoLa solución actualmente aceptada es principalmente correcta.
Si está utilizando una cadena no binaria (CHAR, VARCHAR, TEXT), las comparaciones no distinguen entre mayúsculas y minúsculas , según la clasificación predeterminada.
Si está utilizando una cadena binaria (BINARY, VARBINARY, BLOB), las comparaciones distinguen entre mayúsculas y minúsculas, por lo que deberá usar
LOWER
como se describe en otras respuestas.Si no está utilizando la intercalación predeterminada y está utilizando una cadena no binaria, la distinción de mayúsculas y minúsculas decidirá la distinción entre mayúsculas y minúsculas.
Fuente: https://dev.mysql.com/doc/refman/8.0/en/case-sensitivity.html . Lee atentamente. Algunos otros lo han confundido al decir que las comparaciones son necesariamente sensibles a mayúsculas o minúsculas. Este no es el caso.
fuente
Puedes probarlo. Espero que sea útil.
fuente
Los campos de cadena con la bandera binaria siempre serán sensibles a mayúsculas y minúsculas. Si necesita una búsqueda sensible a mayúsculas y minúsculas para un campo de texto no binario, use esto: SELECCIONE 'prueba' REGEXP BINARY 'TEST' COMO RESULTADO;
fuente