TEXTé usado para grandes pedaços de dados de sequência. Se o comprimento do campo exceder um determinado limite, o texto será armazenado fora da linha.
VARCHARé sempre armazenado em linha e tem um limite de 8000 caracteres. Se você tentar criar um VARCHAR(x), onde x> 8000 , você receberá um erro:
Servidor: mensagem 131, nível 15, estado 3, linha 1
O tamanho () dado ao tipo 'varchar' excede o máximo permitido para qualquer tipo de dados (8000)
Essas limitações de comprimento não se referem VARCHAR(MAX)ao SQL Server 2005 , que pode ser armazenado fora de linha, assim como TEXT.
Observe que aqui MAXnão é um tipo de constante VARCHARe VARCHAR(MAX)são tipos muito diferentes, sendo o último muito próximo TEXT.
Nas versões anteriores do SQL Server, não era possível acessar TEXTdiretamente, você só podia obter um TEXTPTRe usá-lo em READTEXTe WRITETEXTfunções.
No SQL Server 2005, você pode acessar diretamente as TEXTcolunas (embora você ainda precise de uma conversão explícita VARCHARpara atribuir um valor a elas).
TEXT é bom:
- Se você precisar armazenar textos grandes em seu banco de dados
- Se você não pesquisar o valor da coluna
- Se você selecionar esta coluna raramente e não participar dela.
VARCHAR é bom:
- Se você armazenar pequenas cordas
- Se você pesquisar no valor da sequência
- Se você sempre selecioná-lo ou usá-lo em junções.
Ao selecionar aqui, quero dizer emitir qualquer consulta que retorne o valor da coluna.
Ao pesquisar aqui, quero dizer a emissão de quaisquer consultas cujo resultado depende do valor da coluna TEXTou VARCHAR. Isso inclui usá-lo em qualquer condição JOINou WHERE.
Como o TEXTé armazenado fora da linha, as consultas que não envolvem a TEXTcoluna geralmente são mais rápidas.
Alguns exemplos do que TEXTé bom para:
- Comentários do blog
- Páginas Wiki
- Código fonte
Alguns exemplos do que VARCHARé bom para:
- Nomes de usuário
- Títulos da página
- Nomes de arquivos
Como regra geral, se você precisar que seu valor de texto exceda 200 caracteres E não use junção nesta coluna, use TEXT.
Caso contrário, use VARCHAR.
PS O mesmo se aplica a UNICODEativado NTEXTe NVARCHARtambém, que você deve usar nos exemplos acima.
PPS O mesmo se aplica VARCHAR(MAX)e NVARCHAR(MAX)que o SQL Server 2005+ usa em vez de TEXTe NTEXT. Você precisará habilitá large value types out of row-los sp_tableoptionse quiser que eles sejam sempre armazenados fora da linha.
Como mencionado acima e aqui , TEXTisso será preterido em versões futuras:
A text in rowopção será removida em uma versão futura do SQL Server . Evite usar esta opção em novos trabalhos de desenvolvimento e planeje modificar os aplicativos que estão em uso no momento text in row. É recomendável que você armazenar grandes volumes de dados usando os varchar(max), nvarchar(max)ou varbinary(max)tipos de dados. Para controlar o comportamento em linha e fora de linha desses tipos de dados, use a large value types out of rowopção