Selección insensible a mayúsculas de MySQL

¿Alguien puede decirme si un comando SELECT para MySQL no distingue entre mayúsculas y minúsculas por defecto? Y si no, ¿qué comando debería enviar para poder hacer algo como esto?

 SELECT * FROM `table` WHERE `Value` = "DickSavagewood" 

Donde en realidad, el valor real de Value es dicksavagewood .

No distinguen entre mayúsculas y minúsculas, a menos que haga una comparación binaria .

Puede minúsculas el valor y el parámetro pasado:

 SELECT * FROM `table` WHERE LOWER(`Value`) = LOWER("DickSavagewood") 

Otra (mejor) forma sería usar el operador COLLATE como se dice en la documentación

UTILIZAR BINARIO

Este es un simple seleccionar

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

Comparación de cadenas en WHERE frase no es sensible a mayúsculas y minúsculas. Podría intentar comparar usando

 WHERE `colname` = 'keyword' 

o

 WHERE `colname` = 'KeyWord' 

y obtendrás el mismo resultado . Ese es el comportamiento predeterminado de MySQL.

Si desea que la comparación sea sensible a mayúsculas y minúsculas , puede agregar COLLATE siguiente manera:

 WHERE `colname` COLLATE latin1_general_cs = 'KeyWord' 

Ese SQL daría un resultado diferente con este: WHERE colname COLLATE latin1_general_cs = ‘keyword’

latin1_general_cs es una intercalación común o predeterminada en la mayoría de las bases de datos.

Las comparaciones distinguen entre mayúsculas y minúsculas cuando la columna utiliza una intercalación que termina con _ci (como la intercalación de latin1_general_ci predeterminada ) y distinguen entre mayúsculas y minúsculas cuando la columna utiliza una intercalación que termina con _cs o _bin (como las utf8_unicode_cs y utf8_bin ).

Verificar intercalación

Puede verificar su servidor , base de datos y colaciones de conexión usando:

 mysql> show variables like '%collation%'; +----------------------+-------------------+ | Variable_name | Value | +----------------------+-------------------+ | collation_connection | utf8_general_ci | | collation_database | latin1_swedish_ci | | collation_server | latin1_swedish_ci | +----------------------+-------------------+ 

y puedes verificar tu colación de tabla usando:

 mysql> SELECT table_schema, table_name, table_collation FROM information_schema.tables WHERE table_name = `mytable`; +----------------------+------------+-------------------+ | table_schema | table_name | table_collation | +----------------------+------------+-------------------+ | myschema | mytable | latin1_swedish_ci | 

Cambiar colación

Puede cambiar la clasificación de su base de datos, tablas o columnas a mayúsculas y minúsculas de la siguiente manera:

 -- Change database collation ALTER DATABASE `databasename` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin; -- or change table collation ALTER TABLE `table` CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin; -- or change column collation ALTER TABLE `table` CHANGE `Value` `Value` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_bin; 

Sus comparaciones ahora deben distinguir entre mayúsculas y minúsculas.

La intercalación que elige establece si usted es sensible a mayúsculas o minúsculas.

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 la distinción entre mayúsculas y minúsculas al crear la tabla.

El script a continuación crea una tabla. Observe abajo en la parte inferior que dice “COLLATE latin1_general_cs”. Que cs al final significa sensible a mayúsculas y minúsculas. Si desea que su tabla no distinga entre mayúsculas y minúsculas, puede dejar esa parte o usar “COLLATE latin1_general_ci”.

  CREATE Table PEOPLE ( USER_ID INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, FIRST_NAME VARCHAR(50) NOT NULL, LAST_NAME VARCHAR(50) NOT NULL, PRIMARY KEY (USER_ID) ) ENGINE=MyISAM DEFAULT CHARACTER SET latin1 COLLATE latin1_general_cs AUTO_INCREMENT=0; 

Si su proyecto es tal que puede crear su propia tabla, tiene sentido especificar su preferencia de sensibilidad de caso al crear la tabla.

SQL Select no distingue entre mayúsculas y minúsculas.

Este enlace puede mostrarle cómo hacer distingue entre mayúsculas y minúsculas: http://sqlserver2000.databases.aspfaq.com/how-can-i-make-my-sql-queries-case-sensitive.html

Tenga en cuenta también que los nombres de las tablas distinguen entre mayúsculas y minúsculas en Linux a menos que establezca la directiva de configuración lower_case_table_name en 1 . Esto se debe a que las tablas están representadas por archivos que distinguen entre mayúsculas y minúsculas en Linux.

Tenga especial cuidado con el desarrollo en Windows que no distingue entre mayúsculas y minúsculas y se implementa en la producción donde se encuentra. Por ejemplo:

 "SELECT * from mytable" 

against table myTable tendrá éxito en Windows pero fallará en Linux, nuevamente, a menos que se establezca la directiva mencionada.

Referencia aquí: http://dev.mysql.com/doc/refman/5.0/en/identifier-case-sensitivity.html

Prueba con:

 order by lower(column_name) asc; 

Puedes probarlo. espero que sea útil.

 SELECT * FROM `table` WHERE `Value` COLLATE latin1_general_cs = "DickSavagewood"