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 rowopçã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 rowopção.