Acredito que muitos usem e poucos saibam o porque estão usando determinados string types no momento que estão criando seus campos em seu banco de dados relacional.
Pelo menos isso já aconteceu diversas vezes comigo e toda vez opto pelo que considero ser o melhor mesmo não tendo a menor idéia de qual realmente é o melhor, bom, depois de me deparar com uma situação vergonhosa, onde uma pessoa me perguntou qual a diferença entre os campos, decidi finalmente ir atrás e estudar, o resultado dessa pesquisa segue abaixo:
String Types CHAR e VARCHAR
Os tipos CHAR e VARCHAR são parecidos, mas diferem na maneira como eles são armazenados e recuperados. São declaradas com um comprimento que indica o número máximo de caracteres que você deseja armazenar. Por exemplo, CHAR (30) pode conter até 30 caracteres.
O comprimento de uma coluna CHAR é fixado para o comprimento que você declare, quando você cria a tabela. O comprimento pode ser qualquer valor de 0 a 255. Quando valores CHAR são armazenados, eles são preenchidos a direita com espaços até o comprimento especificado. Quando valores CHAR são recuperados, espaços extras são removidos.
Em contraste com o CHAR, valores VARCHAR são armazenados como um byte ou dois bytes de prefixo de comprimento, mais os dados. O comprimento do prefixo indica o número de bytes do valor. A coluna usa um byte de comprimento se os valores não requerem mais do que 255 bytes, dois bytes de comprimento, se os valores podem exigir mais de 255 bytes.
Qual é o melhor mesmo ?
Se você possui um sistema pequeno, com certeza não vai fazer diferença o string type que você selecionar, porém, se há a expectativa de que seu sistema cresça e chegue ao ponto em que cada byte é válido, então, eu teria como base 2 premissas:
- Primeira -Conhecendo o tamanho do meu conteúdo e sabendo que ele não irá sofrer alterações bruscas, eu optaria pelo CHAR;
- Segundo -Sabendo que o meu campo possui uma variação de tamanho de acordo com cada dado que é inserido na tabela, eu utilizaria o VARCAR.
Se realmente minha idéia está correta, eu não sei, mais pelo menos foi o que eu entendi.
[]’s
Fonte: MySQL