Tudo o que sei sobre as diferenças deles é varchartem limite e textnã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 é varchartem limite e textnã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 texttipo, um novo tipo varcharfoi 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 textargumento 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 textainda é 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.