Descobri mais uma amolação do MySQL, o nome das tabelas é case sensitive. Até ai, nada de muito grave, muitas linguagens de programação são case sentives e as pessoas se habituam a utilizar convenções, porém, o MySQL só é case sensitive se o filesystem o for (lembrem-se que no MyISAM cada tabela é um arquivo), ou seja, o programa idiota passa para a o fopen o nome da tabela como o usuário digita no SQL.
Tive que implantar um sistema que foi desenvolvido em que uma tabela é referenciada com diferentes convencões de case em diferentes partes do sistema. Como o sistema provavelmente foi desenvolvido no windows, esse problema passou despercebido.
Por sorte o script que criava o banco não especificava o Engine a ser utilizado, por isso eu pude editar o my.cnf para que o InnoDB fosse o engine default, e neste caso a lower_case_table_names=1 faz com que o MySQL seja case insentitive [1].
Aproveitei para corrigir outra chateação, o MySQL vem configurado como latin1 (até ai tudo bem) e ordencão de palavras em Sueco (??????). Para um configuracão razoável é preciso adicionar as seguintes linhas no my.cnf:
character-set-server=utf8
collation-server=utf8_general_ci
[1] http://dev.mysql.com/doc/refman/5.0/en/identifier-case-sensitivity.html
Tuesday, November 25, 2008
Subscribe to:
Post Comments (Atom)
1 comment:
Opa!
Fiz um teste rápido e o InnoDB também ficou case-insensitive...
Se não houvessem terminacões nos arquivos, seria impossível criar uma tabela chamada AUX no fat32... isso é reservado!! tente criar um arquivo com esse nome (ou com o nome de qualquer device do DOS) no windows...
valeu varuzza!!
Post a Comment