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 MAX
não é um tipo de constante VARCHAR
e 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 TEXT
diretamente, você só podia obter um TEXTPTR
e usá-lo em READTEXT
e WRITETEXT
funções.
No SQL Server 2005, você pode acessar diretamente as TEXT
colunas (embora você ainda precise de uma conversão explícita VARCHAR
para 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 TEXT
ou VARCHAR
. Isso inclui usá-lo em qualquer condição JOIN
ou WHERE
.
Como o TEXT
é armazenado fora da linha, as consultas que não envolvem a TEXT
coluna 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 UNICODE
ativado NTEXT
e NVARCHAR
també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 TEXT
e NTEXT
. Você precisará habilitá large value types out of row
-los sp_tableoption
se quiser que eles sejam sempre armazenados fora da linha.
Como mencionado acima e aqui , TEXT
isso será preterido em versões futuras:
A text in row
opçã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 row
opção