Imprimir este artigo Imprimir este artigo Enviar o artigo a um amigo Enviar o artigo a um amigo
Página Inicial > BD, Windows > Identificadores lowercase em MySql no Windows

Identificadores lowercase em MySql no Windows

O MySql, por ser um banco muito ágil, leve e bastante popular, está disponível em diversos planos de hospedagem de sites por aí. Eu particularmente prefiro o PostgreSQL e o Firebird, pois possuem recursos de views, stored procedures e triggers a bastante tempo, coisas que o MySql só veio ter na versão 5.

Pelo fato de o MySql ser incluído sem custo nos planos de hospedage, tive que utilizá-lo num sistema web de gerenciamento financeiro que estou desenvolvendo para um cliente, utilizando Borland Developer Studio 2006, com linguagem ASP.NET e Delphi.

O MySql no Windows é case insensitive, porém, em um servidor Linux é case sensitive. Aí começam os problemas. No Windows, o padrão do MySql é criar os identificadores (tabelas, nomes de campos e tudo mais) em minúsculas (lower case). Mesmo que você coloque o nome de uma tabela, por exemplo, entre apóstrofos, o MySql no Windows cria a tabela com nome em minúsculas. Assim, mesmo fazendo create table Cliente …. ou create table `Cliente`…, ele criará a tabela como cliente (tudo minúsculo). Ao fazer a sincronização da estrutura do banco de dados de desenvolvimento, no servidor Windows, para um servidor Linux de produção serão descobertos os problemas. Como no Linux o MySql, por padrão, obedece o case dos nomes dos objetos, se você tem uma tabela Cliente e gerar um script sql a partir do seu banco no servidor Windows com uma instrução como drop table cliente a mesma não será executada, pois no banco no servidor Linux não existe uma tabela cliente e sim uma tabela Cliente.

Desta forma, o script sql gerado no seu banco no servidor Windows deverá ser todo modificado manualmente para poder rodar no servidor MySql no Linux.

Depois de estar de saco cheio de ter que ficar ajustando script na mão, resolvi procurar na net como resolver isto, até que encontrei algumas perguntas em fóruns que me levaram a este link no site do MySql. Lá mostra que existe um parâmetro que você pode usar no MySql para definir este comportamento. Assim, resumindo, você precisa adicionar a linha a seguir no arquivo my.ini, localizado na pasta de instalação do mysql, que sendo a versão 5, normalmente está em c:\arquivos de programas\mysql\mysql server 5\

set-variable = lower_case_table_names=0

Onde o parâmetro lower_case_table_names define se os identificadores ficarão todos em minúsculas ou não. Assim, defini 0 para indicar que não.

Em Windows, por ter um sistema de arquivos case insensitive, segundo o site do MySQL, forçar os identificadores a serem case sensitive, mudando lower_case_table_names para zero, pode corremper índices ao acessar tabelas MyISAM com o case diferente do que foi definido. Mas como não uso tabelas MyISAM, não tenho com o que me preocupar.

Mais informações em http://dev.mysql.com/doc/refman/5.0/en/identifier-case-sensitivity.html

Isto foi o que aprendi de novo hoje.
Espero que ajude muita gente.
T+

VN:F [1.8.4_1055]
Rating: 10.0/10 (2 votes cast)
VN:F [1.8.4_1055]
Rating: 0 (from 0 votes)
Identificadores lowercase em MySql no Windows10.0102

Posts relacionados:

  1. Usando as ferramentas de linha de comando do MySQL
  2. Update com Join no MySQL
  3. Excluindo Constraints Foreign Key no MySQL (drop constraint)
  4. Hospedagem de sites com banco MySQL 5
  5. Pegando o último valor de auto incremento inserido no mysql

Posts relacionados trazidos a você pelo Yet Another Related Posts Plugin.

Categories: BD, Windows Tags: , ,
  1. 29, agosto, 2007 em 01:05 | #1

    Manoel, o Postgre sofre do mesmo problema nas implementações Win e Lnx ??
    Flws fii, abração !!

    UN:F [1.8.4_1055]
    Rating: 0.0/5 (0 votes cast)
    UN:F [1.8.4_1055]
    Rating: 0 (from 0 votes)
  2. Danilo Akamine
    22, julho, 2008 em 19:02 | #2

    Mto bom

    UN:F [1.8.4_1055]
    Rating: 0.0/5 (0 votes cast)
    UN:F [1.8.4_1055]
    Rating: 0 (from 0 votes)
  3. 21, outubro, 2008 em 23:05 | #3

    Mt bom, eu só fiquei com uma duvida:
    essa configuração faz o windows gravar usando Maiuscula e minuscula ou faz com que o servidores aceitem consultas das duas formas?

    grato,

    UN:F [1.8.4_1055]
    Rating: 0.0/5 (0 votes cast)
    UN:F [1.8.4_1055]
    Rating: 0 (from 0 votes)
  4. manoelcampos
    21, outubro, 2008 em 23:57 | #4

    As consultas continuam funcionando do mesmo jeito, o que muda é a forma de gravar o nome de identificadores como tabelas e campos. No linux, o padrão é que os objetos ficam com o nome na forma que o desenvolvedor definiu. Por exemplo, eu posso ter uma tabela chamada PessoaFisica. No windows, com a configuração padrão, a tabela ficaria obrigatoriamente como pessoafisica. No linux se eu fizer select * from pessoafisica vai dar erro informando que a tabela não existe, somente funciona se eu fizer select * from PessoaFisica. Com a configuração que mostrei, no windows vai funcionar como no linux, deixando o nome para os objetos como vc definir, assim, se vc criar a tabela com o nome de PessoaFisica, assim ficará, e não pessoafisica. Porém, no Windows com esta configuração, mesmo eu fazendo select * from pessoafisica funciona.

    UN:F [1.8.4_1055]
    Rating: 3.0/5 (1 vote cast)
    UN:F [1.8.4_1055]
    Rating: 0 (from 0 votes)
  5. 22, outubro, 2008 em 16:14 | #5

    ok, entendi agora.
    Muito obrigado pela atenção.

    UN:F [1.8.4_1055]
    Rating: 0.0/5 (0 votes cast)
    UN:F [1.8.4_1055]
    Rating: 0 (from 0 votes)
  6. 13, janeiro, 2010 em 13:42 | #6

    Muito Obrigado pelo Posto mesmo sendo a qse 3 anos atras isso tirou a minha dúvida de PQ o sistema que estou desenvolvendo funciona na rede da empresa (100%) windows e pq no cliente algumas partes do Software não fuinciona.

    PQ as query não estão levando em conta o Case Sensitive das tabelas….

    UN:F [1.8.4_1055]
    Rating: 5.0/5 (1 vote cast)
    UN:F [1.8.4_1055]
    Rating: 0 (from 0 votes)
  1. Nenhum trackback ainda.