Tudo o que sei sobre as diferenças deles é varchar
tem limite e text
não é. A documentação não menciona isso.
Essa é realmente a única diferença? Nenhuma consideração sobre desempenho ou etc?
Tudo o que sei sobre as diferenças deles é varchar
tem limite e text
não é. A documentação não menciona isso.
Essa é realmente a única diferença? Nenhuma consideração sobre desempenho ou etc?
Respostas:
O pano de fundo disso é: O antigo sistema Postgres usava a linguagem PostQUEL e usava um tipo de dados chamado text
(porque alguém achou que esse era um bom nome para um tipo que armazena texto). Em seguida, o Postgres foi convertido para usar o SQL como idioma. Para obter compatibilidade com o SQL, em vez de renomear o text
tipo, um novo tipo varchar
foi adicionado. Mas ambos os tipos usam as mesmas rotinas C internamente.
Agora, até certo ponto e em alguns lugares, text
é codificado como um tipo padrão, caso nada mais possa ser derivado. Além disso, a maioria das funções está disponível apenas como text
argumento ou retorno text
. Os dois tipos são compatíveis com binários, portanto, a conversão é uma operação trivial de tempo de análise. Mas o uso text
ainda é mais natural para o sistema.
Mas, além desses pontos, não há diferença perceptível. Use o que parecer mais bonito para você. ;-)
Veja esta pergunta semelhante . O problema é que não há diferença, mas especificar um comprimento máximo como varchar(n)
geralmente não é a seu favor, pois ele usa mais espaço, mas não melhora o desempenho.
http://www.postgresql.org/docs/8.4/interactive/datatype-character.html
character varying(n), varchar(n) variable-length with limit
text variable unlimited length
texto sem comprimento declarado. Não há diferenças de desempenho entre esses dois tipos.