MySQL – Comparação de nomes de tabelas

Essa semana estava publicando um banco de dados em ambiente de produção ( ambiente meio que completamente diferente do ambiente de desenvolvimento :S … mas tudo bem ) e o restore insistia em retornar uma mensagem de erro ao tentar inserir os registros pois não encontrava a tabela que tinha acabado de criar. Isso estava acontecendo pq em produção o nome da tabela estava em lower case e no script em upper case. Nunca prestei atenção nessa característica do mysql, pra mim era case insensitive … mas pelo visto não é 🙂 – contra fatos, não há argumentos já dizia Bento XVI.

Procurando no pai dos burros, descobri que a solução é bem simples, basta definir a variável lower_case_table_names no my.cnf/my.ini … na seção mysqld.

Os valores possíveis são:

  • 0 (Zero) – Os nomes são armazenados na forma original, como informado no comando CREATE e a comparação é case sensitive.
  • 1 (Um) – Os nomes são armazenados em lower case e a comparação é case insensitive.
  • 2 (Dois) – Os nomes são armazenados na forma original, como informado no comando CREATE e a comparação é case insensitive – Essa forma funciona apenas em sistemas case insensitive.

Em meu caso eu tinha um servidor de desenvolvimento Linux e produção Windows Server (tudo a ver heheheh) e usei em ambos a opção 1. Ficando assim:

[mysqld]

lower_case_table_names = 1

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

Abraços