Olá Pessoal,
Mais um thoubletshooting, e dessa vez é com o Mysql. É aquela velha frase “vivendo e aprendendo”. No dia a dia trabalho com outros bancos de dados, mas nos meus projetos house-made gosto do mysql.
Um dia desses estava desenvolvendo e um dos requisitos era considerar o case-sensitive. Dai vou lá feliz da vida usando o Criteria do Hibernate com o MySql:
criteria.add(Restrictions.eq(“email”, email));
criteria.add(Restrictions.eq(“password”, password));
E o que acontece?
Simplesmente se tiver:
camilo@camilolopes.com com o password: 123cam
e
camilo@camilolopes.com com o password: 123CAM
Teremos dois registros no retorno.
Daí fui ver na documentação o motivo e achei isso:
http://dev.mysql.com/doc/refman/5.0/en/case-sensitivity.html
Solução
Como podemos ver na documentação acima, o Mysql trata Varchar como case-insensitive. Daí ao criar a tabela devemos setar a flag Binary. Caso a tabela já exista, basta dar um alter table
ALTER TABLE `user` MODIFY COLUMN `EMAIL` VARCHAR(255) BINARY CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL;
Pronto. E resolvido.
Vou ficando por aqui.
See ya!!!