Saltar al contenido

¿Cómo puedo hacer que SQL sea sensible a mayúsculas y minúsculas? string comparación en MySQL?

Contamos con tu ayuda para extender nuestras reseñas referente a las ciencias de la computación.

Solución:

La buena noticia es que si necesita hacer una consulta que distinga entre mayúsculas y minúsculas, es muy fácil de hacer:

SELECT *  FROM `table` WHERE BINARY `column` = 'value'

http://dev.mysql.com/doc/refman/5.0/en/case-sensitivity.html

El conjunto de caracteres y la intercalación predeterminados son latin1 y latin1_swedish_ci, por lo que no son binarios. string las comparaciones no distinguen entre mayúsculas y minúsculas de forma predeterminada. Esto significa que si busca con col_name LIKE ‘a%’, obtiene todos los valores de columna que comienzan con A o a. Para que esta búsqueda distinga entre mayúsculas y minúsculas, asegúrese de que uno de los operandos tenga una intercalación binaria o que distinga entre mayúsculas y minúsculas. Por ejemplo, si está comparando una columna y una string que ambos tienen el conjunto de caracteres latin1, puede usar el operador COLLATE para hacer que cualquiera de los operandos tenga la intercalación latin1_general_cs o latin1_bin:

col_name COLLATE latin1_general_cs LIKE 'a%'
col_name LIKE 'a%' COLLATE latin1_general_cs
col_name COLLATE latin1_bin LIKE 'a%'
col_name LIKE 'a%' COLLATE latin1_bin

Si desea que una columna siempre se trate con distinción entre mayúsculas y minúsculas, declárela con una intercalación binaria o que distinga entre mayúsculas y minúsculas.

La respuesta publicada por Craig White tiene una gran penalización de rendimiento.

SELECT *  FROM `table` WHERE BINARY `column` = 'value'

porque no usa índices. Por lo tanto, debe cambiar la clasificación de la tabla como se menciona aquí https://dev.mysql.com/doc/refman/5.7/en/case-sensitivity.html.

O

La solución más fácil, debe usar un BINARIO de valor.

SELECT *  FROM `table` WHERE `column` = BINARY 'value'

P.ej

mysql> EXPLAIN SELECT * FROM temp1 WHERE BINARY col1 = "ABC" AND col2 = "DEF" ;
+----+-------------+--------+------+---------------+------+---------+------+--------+-------------+
| id | select_type | table  | type | possible_keys | key  | key_len | ref  | rows   | Extra       |
+----+-------------+--------+------+---------------+------+---------+------+--------+-------------+
|  1 | SIMPLE      | temp1  | ALL  | NULL          | NULL | NULL    | NULL | 190543 | Using where |
+----+-------------+--------+------+---------------+------+---------+------+--------+-------------+

contra

mysql> EXPLAIN SELECT * FROM temp1 WHERE col1 = BINARY "ABC" AND col2 = "DEF" ;
+----+-------------+-------+-------+---------------+---------------+---------+------+------+------------------------------------+
| id | select_type | table | type  | possible_keys | key           | key_len | ref  | rows | Extra                              |
+----+-------------+-------+-------+---------------+---------------+---------+------+------+------------------------------------+
|  1 | SIMPLE      | temp1 | range | col1_2e9e898e | col1_2e9e898e | 93      | NULL |    2 | Using index condition; Using where |
+----+-------------+-------+-------+---------------+---------------+---------+------+------+------------------------------------+
enter code here

1 fila en conjunto (0.00 seg)

Al final de todo puedes encontrar los informes de otros usuarios, tú asimismo tienes la opción de dejar el tuyo si dominas el tema.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *