MySQL insensible a mayúsculas y minúsculas


¿Puede alguien decirme si un comando SELECT para MySQL es insensible a mayúsculas y minúsculas por defecto? Y si no, qué orden tendría que enviar para que pueda hacer algo como:

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

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

 191
Author: Teun Zengerink, 2010-10-14

11 answers

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

 414
Author: Marc B,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-05 18:19:48

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

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

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

 93
Author: Colin Hebert,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-10-14 19:53:36

USE BINARIO

Esta es una simple selección

SELECT * FROM myTable WHERE 'something' = 'Something'

= 1

Este es un select con binario

SELECT * FROM myTable WHERE BINARY 'something' = 'Something'

O

SELECT * FROM myTable WHERE 'something' = BINARY 'Something'

= 0

 44
Author: Someone,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-03-21 15:28:07

Comparación de cadenas en DONDE la frase no distingue entre mayúsculas y minúsculas. Usted 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, podría añadir COLLATE tal como esto:

WHERE `colname` COLLATE latin1_general_cs = 'KeyWord'

Que SQL daría un resultado diferente con este: WHERE colname COLLATE latin1_general_cs = 'keyword'

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

 24
Author: Ifan Iqbal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-09-05 04:23:21

Las comparaciones son insensibles a mayúsculas y minúsculas cuando la columna utiliza una intercalación que termina con _ci (como el predeterminado latin1_general_ci intercalación) y son sensibles a mayúsculas y minúsculas cuando la columna utiliza una intercalación que termina con _cs o _bin (como las intercalaciones utf8_unicode_cs y utf8_bin).

Cotejo de comprobación

Puede comprobar su servidor , base de datos y conexión intercalaciones 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 usted puede comprobar su cuadro cotejo utilizando:

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 |

Cotejo de cambios

Puede cambiar la intercalación de su base de datos, tabla o columna a algo que distinga entre 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.

 21
Author: ostrokach,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-27 06:30:21

La intercalación que elija establece si distingue entre mayúsculas y minúsculas o no.

 15
Author: chuck taylor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-10-14 19:55:12

El valor predeterminado es insensible a mayúsculas y minúsculas, pero la siguiente cosa más importante usted debe echar un vistazo a es cómo se creó la tabla en primer lugar, porque se puede especificar el caso sensibilidad al crear la tabla.

El script de abajo crea una tabla. Observe que en la parte inferior dice "COLLATE latin1_general_cs". Ese cs al final significa que distingue entre mayúsculas y minúsculas. Si quisieras tu tabla para ser insensible a mayúsculas y minúsculas que o bien dejar que separe o use " COTEJAR 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, entonces tiene sentido especificar su preferencia de sensibilidad de mayúsculas y minúsculas al crear la tabla.

 8
Author: Ken Johnson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-04 17:27:54

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

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

 4
Author: Jacob Nelson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-10-14 19:52:06

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 la implementación en producción donde está. Por ejemplo:

"SELECT * from mytable" 

Contra la tabla MyTable tendrá éxito en Windows pero fallará en Linux, de nuevo, a menos que se establezca la directiva antes mencionada.

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

 2
Author: Wes Grant,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-10-23 20:08:37

Prueba con:

order by lower(column_name) asc;
 1
Author: VS-java,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-17 20:01:12

Puedes probarlo. espero que sea útil.

SELECT * FROM `table` WHERE `Value` COLLATE latin1_general_cs = "DickSavagewood"
 0
Author: Zahid,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-14 20:18:21