tablas sensibilidad primera nombres minúsculas minusculas mayúsculas mayusculas mayuscula lower_case_table_names los letra las ignorar identificar entre diferencias diferenciar mysql select

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 probarlo. Espero que sea de utilidad.

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




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