sensibilidad - MySQL mayúsculas insensibles seleccionar
mysql mayuscula primera letra (11)
El valor predeterminado es que no distingue entre mayúsculas y minúsculas, pero la siguiente cosa más importante que debe analizar 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.
La siguiente secuencia de comandos crea una tabla. Fíjese en la parte inferior que dice "COLLATE latin1_general_cs". Ese cs al final significa mayúsculas y minúsculas. Si quisiera que su tabla no distinguiera entre mayúsculas y minúsculas, dejaría esa parte fuera o usaría "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, entonces tiene sentido especificar su preferencia de distinción entre mayúsculas y minúsculas cuando cree la tabla.
¿Alguien puede decirme si un comando SELECT
para MySQL no distingue entre mayúsculas y minúsculas por defecto? Y si no, ¿qué comando tendría que enviar para poder hacer algo como:
SELECT * FROM `table` WHERE `Value` = "DickSavagewood"
Donde en la actualidad, el valor real del Value
es dicksavagewood
.
Intenta con:
order by lower(column_name) asc;
La comparación de cadenas en la frase WHERE no distingue entre mayúsculas y minúsculas. Podrías intentar comparar usando
WHERE `colname` = ''keyword''
o
WHERE `colname` = ''KeyWord''
y obtendrás el mismo resultado . Ese es el comportamiento por defecto de MySQL.
Si desea que la comparación distinga entre 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 latin1_general_cs
común o predeterminada en la mayoría de las bases de datos.
La recopilación que elija establece si se distingue entre mayúsculas y minúsculas o no.
Las comparaciones no distinguen entre mayúsculas y minúsculas cuando la columna utiliza una intercalación que termina con _ci
(como la intercalación predeterminada latin1_general_ci
) y son sensibles a las 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
).
Comprobar colación
Puede verificar su servidor , base de datos y colaciones de conexión utilizando:
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 tablas 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 su base de datos, tabla o colación de columnas 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 ser sensibles a las mayúsculas y minúsculas.
Puedes escribir en 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 COLLATE
dev.mysql.com/doc/refman/5.0/en/case-sensitivity.html
Puedes probarlo. Espero que sea de utilidad.
SELECT * FROM `table` WHERE `Value` COLLATE latin1_general_cs = "DickSavagewood"
SQL Select no distingue entre mayúsculas y minúsculas.
Este enlace puede mostrarle cómo hacer que se distingan entre 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
Son insensibles a mayúsculas y minúsculas, a menos que hagas una comparación binaria .
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.
Especialmente, tenga cuidado con el desarrollo en Windows, que no distingue entre mayúsculas y minúsculas y se implementa en producción donde está. Por ejemplo:
"SELECT * from mytable"
against table myTable tendrá éxito en Windows pero fallará en Linux, de nuevo, a menos que se establezca la directiva mencionada anteriormente.
Consulte aquí: http://dev.mysql.com/doc/refman/5.0/en/identifier-case-sensitivity.html
UTILIZAR BINARIO
Esta es una simple selección
SELECT * FROM myTable WHERE ''something'' = ''Something''
= 1
Este es un selecto con binario.
SELECT * FROM myTable WHERE BINARY ''something'' = ''Something''
o
SELECT * FROM myTable WHERE ''something'' = BINARY ''Something''
= 0