Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Pessoal, boa tarde!
Um cliente tem um software em java que trabalha com mysql e ele me pediu o seguinte:
>
Ao realizar uma consulta no MySQL, o comando SQL informado pelosistema não está considerando case sensitive. O que significa que a query podeser "SELECT * FROM TABELA WHERE COLUNA = 1" ou "select * fromtabela where coluna = 1" em diferentes telas do sistema.
O que está acontecendo é que, em determinadas telas, a query estáem maiúsculo no where (select * from tabela where COLUNA = 1), pois háconsultas dinâmicas, onde o "where" é construído em tempo de execução. Quando isto acontece, o MySQL reclama que não existe coluna com este nome,porém a coluna está lá, só que em minúsculo (coluna).
Precisamos que esta verificação não seja feita pelo MySQL, e queseja case insensitive para as colunas. Neste caso, se eu mudo a query para omesmo case do MySQL, passa a funcionar. Porém o sistema foi construído sem essaverfiicação pois, o MySQL anterior não tinha essa restrição.
Resumindo: Teria alguma opção no MySql para que não seja feita essa verificação de case sensitive?
Ou será que vou ter que dar uma má noticia pro cara? rs
Obrigado até o momento, abraços!
>
Qual a versão do mysql que sendo está utilizanda ?
Versão 5.1
>
Versão 5.1
:seta:
Enter password: **********************
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 128913294
Server version: 5.1.57 Gentoo
Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show tables ;
Empty set (0.06 sec)
mysql> create table teste (
-> COLUNA varchar ( 12 ) not null
-> ) ;
Query OK, 0 rows affected (0.10 sec)
mysql> insert into teste ( coluna ) values ( 'a' ) , ( 'b' ) , ( 'c' );
Query OK, 3 rows affected (0.06 sec)
Registros: 3 - Duplicados: 0 - Avisos: 0
mysql> select * from teste where coluna in ( 'a' , 'b' ) ;
+--------+
| COLUNA |
+--------+
| a |
| b |
+--------+
2 rows in set (0.08 sec)
mysql>
>
:seta:
Enter password: **********************
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 128913294
Server version: 5.1.57 Gentoo
Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show tables ;
Empty set (0.06 sec)
mysql> create table teste (
-> COLUNA varchar ( 12 ) not null
-> ) ;
Query OK, 0 rows affected (0.10 sec)
mysql> insert into teste ( coluna ) values ( 'a' ) , ( 'b' ) , ( 'c' );
Query OK, 3 rows affected (0.06 sec)
Registros: 3 - Duplicados: 0 - Avisos: 0
mysql> select * from teste where coluna in ( 'a' , 'b' ) ;
+--------+
| COLUNA |
+--------+
| a |
| b |
+--------+
2 rows in set (0.08 sec)
mysql>
Muito obrigado Andrey! Bom dia!
Na hora de escolher o collation da sua tabela ou banco, você pode pegar os que tem ao final "_ci" (exemplo: utf8_general_ci) que indica que as consultas serão consideradas "case insensitive".
http://dev.mysql.com/doc/refman/5.0/en/case-sensitivity.html
http://ajuda.uolhost.com.br/index.php?p=resposta&res=891#rmcl
Isso vale pra valores, não sei se vale pra nomes de campos ou nomes de tabelas.
Testa aí e diz pra gente.
Qual a versão do mysql que sendo está utilizanda ?