Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Tipo de texto do SQL Server vs. tipo de dados varchar


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:

O text 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 usam text in row . Recomendamos que você armazene dados grandes usando o varchar(max) , nvarchar(max) , ou varbinary(max) tipos de dados. Para controlar o comportamento dentro e fora da linha desses tipos de dados, use os large value types out of row opção.