Artigos de October, 2012.



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.

Assine o RSS de meus Artigos e Comentários.