CHAR ou VARCHAR? Que tipo de campo escolher no MySQL?

Ambos os tipos de campo “texto” podem ser definidos com um comprimento m√°ximo no MySQL. A principal diferen√ßa entre os dois tipos de campos √© que o CHAR sempre armazenar√° o texto com o tamanho fixo, mesmo que o “texto” seja menor do que o tamanho m√°ximo especificado na cria√ß√£o do campo. Neste caso, o pr√≥prio SGBD do MySQL ir√° usar espa√ßos a direita do “texto” preenchendo o campo at√© a quantidade m√°xima especificada em sua cria√ß√£o. Note, que esses espa√ßos ser√£o removidos quando voc√™ recuperar os dados a armazenados.

Por outro lado, “textos” armazenadas em uma coluna VARCHAR exigem apenas o tamanho do “texto” armazenado. Portanto, a palavra “ivo” em uma coluna VARCHAR(10) ir√° requerer quatro bytes de espa√ßo (o comprimento do “texto” mais 1), enquanto em uma coluna CHAR(10), a mesma palavra exigir√° 10 bytes de espa√ßo.

Assim, de modo geral, as colunas VARCHAR tendem a consumir menos espa√ßo em disco do que colunas CHAR. Contudo, as bases de dados s√£o normalmente mais r√°pidas quando se trabalha com colunas de tamanho fixo, o que √© um argumento a favor de CHAR. E essa mesma palavra de tr√™s letras, “ivo”, em um CHAR(3) utiliza apenas 3 bytes, enquanto em um VARCHAR(10) requer 4. Desta forma, como decidir qual usar?

Se o “texto” for sempre de um tamanho determinado¬†(por exemplo, uma abreviatura do estado), use CHAR, caso contr√°rio,¬†use VARCHAR. Voc√™ pode notar, por√©m, que, em alguns casos, o MySQL define uma coluna de um tipo (como CHAR) embora voc√™ a tenha criado como outro tipo (VARCHAR). Isto √© perfeitamente normal e √© a maneira que o MySQL possui para melhorar o desempenho.

OBS: Note que a palavra texto encontra-se marcada aqui no sentido de ressaltar que o campo “string” pode, al√©m de conter caracteres, conter tamb√©m n√ļmeros, datas ou listas armazenadas como texto (string). Neste caso, n√£o poder√£o ser usadas as fun√ß√Ķes SQL de c√°lculo espec√≠ficas de outros tipos. A n√£o ser que sejam convertidas antes.

Fonte: PHP 6 and MySQL 5 for Dynamic Web Sites. ULLMAN, Larry, 2007.

3 Comentários para “CHAR ou VARCHAR? Que tipo de campo escolher no MySQL?”

  1. Renan Coelho

    Ol√°! Gostaria de agradecer, pois eu estava com essa d√ļvida em utilizar CHAR ou VARCHAR e aqui encontrei tudo que eu precisava :D Obrigado mesmo!

  2. Diego Teixeira

    Opa!
    vlw cara,tnha procurado em varios outros sites ,e so conseguir porque usar char no seu topico

  3. Danilo

    Muito bom :) Estou relembrando e esse artigo me ajudou!

Comente este artigo!

Current day month ye@r *