Não há diferença, sob o capô é tudo
varlena
(matriz de comprimento variável). Confira este artigo do Depesz:http://www.depesz.com/index.php/2010/03/02/charx-vs-varcharx-vs-varchar-vs-text/
Alguns destaques:
Para resumir tudo:
- char(n) – ocupa muito espaço ao lidar com valores menores que
n
(preenchê-los paran
), e pode levar a erros sutis devido à adição de espaços à direita, além de ser problemático alterar o limite- varchar(n) – é problemático alterar o limite no ambiente ao vivo (requer bloqueio exclusivo ao alterar a tabela)
- varchar – assim como texto
- texto – para mim um vencedor – sobre (n) tipos de dados porque não tem seus problemas, e sobre varchar – porque tem nome distinto
O artigo faz testes detalhados para mostrar que o desempenho das inserções e seleções para todos os 4 tipos de dados são semelhantes. Ele também analisa detalhadamente maneiras alternativas de restringir o comprimento quando necessário. Restrições ou domínios baseados em função fornecem a vantagem de aumento instantâneo da restrição de comprimento e, com base no fato de que diminuir uma restrição de comprimento de string é raro, depesz conclui que um deles é geralmente a melhor escolha para um limite de comprimento.