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 ūüėÄ 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!