TEXT
é usado para grandes pedaços de dados de string. 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 personagens. Se você tentar criar um VARCHAR(x)
, onde x> 8.000 , você recebe um erro:
Servidor:Msg 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)
Estas limitações de comprimento não dizem respeito a
VARCHAR(MAX)
no SQL Server 2005 , que pode ser armazenado fora da linha, assim como TEXT
. Observe que
MAX
não é um tipo de constante aqui, VARCHAR
e VARCHAR(MAX)
são tipos muito diferentes, sendo o último muito próximo de TEXT
. Em versões anteriores do SQL Server você não pôde acessar o
TEXT
diretamente, você só poderia obter um TEXTPTR
e use-o em READTEXT
e WRITETEXT
funções. No SQL Server 2005 você pode acessar diretamente
TEXT
colunas (embora você ainda precise de uma conversão explícita para VARCHAR
atribuir um valor para eles). 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 strings
- Se você pesquisar pelo valor da string
- Se você sempre seleciona ou usa em junções.
Ao selecionar aqui quero dizer emitir quaisquer consultas que retornem o valor da coluna.
Ao pesquisar aqui quero dizer emitir quaisquer consultas cujo resultado dependa do valor do
TEXT
ou VARCHAR
coluna. Isso inclui usá-lo em qualquer JOIN
ou WHERE
doença. Como o
TEXT
é armazenado fora da linha, as consultas não envolvem o TEXT
coluna são geralmente mais rápidos. Alguns exemplos do que
TEXT
é bom para:- Comentários do blog
- Páginas da Wiki
- Fonte do código
Alguns exemplos do que
VARCHAR
é bom para:- Nomes de usuário
- Títulos das páginas
- Nomes de arquivo
Como regra geral, se você precisar que o valor do texto exceda 200 caracteres E não use join nesta coluna, use
TEXT
. Caso contrário, use
VARCHAR
. P.S. O mesmo se aplica a
UNICODE
ativado NTEXT
e NVARCHAR
também, que você deve usar para os exemplos acima. P.P.S. O mesmo se aplica a
VARCHAR(MAX)
e NVARCHAR(MAX)
que o SQL Server 2005+ usa em vez de TEXT
e NTEXT
. Você precisará habilitar large value types out of row
para eles com sp_tableoption
se você quiser que eles sejam sempre armazenados fora da linha. Conforme mencionado acima e aqui ,
TEXT
será preterido em versões futuras:
Otext in row
opção será removida em uma versão futura do SQL Server . Evite usar essa opção em novos trabalhos de desenvolvimento e planeje modificar aplicativos que atualmente usamtext in row
. Recomendamos que você armazene dados grandes usando ovarchar(max)
,nvarchar(max)
, ouvarbinary(max)
tipos de dados. Para controlar o comportamento dentro e fora da linha desses tipos de dados, use oslarge value types out of row
opção.