Eu tenho dados de caracteres de tamanho variável e quero armazenar no banco de dados do SQL Server (2005). Quero aprender algumas práticas recomendadas sobre como escolher o tipo SQL TEXT ou escolher o tipo VARCHAR SQL, prós e contras em performance / pegada / função.
sql-server
text
varchar
sqldatatypes
George2
fonte
fonte
Respostas:
Se você estiver usando o SQL Server 2005 ou posterior, use
varchar(MAX)
. Otext
tipo de dados está obsoleto e não deve ser usado para novos trabalhos de desenvolvimento. Dos documentos :fonte
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 umVARCHAR(x)
, onde x> 8000 , você receberá um erro:Essas limitações de comprimento não se referem
VARCHAR(MAX)
ao SQL Server 2005 , que pode ser armazenado fora de linha, assim comoTEXT
.Observe que aqui
MAX
não é um tipo de constanteVARCHAR
eVARCHAR(MAX)
são tipos muito diferentes, sendo o último muito próximoTEXT
.Nas versões anteriores do SQL Server, não era possível acessar
TEXT
diretamente, você só podia obter umTEXTPTR
e usá-lo emREADTEXT
eWRITETEXT
funções.No SQL Server 2005, você pode acessar diretamente as
TEXT
colunas (embora você ainda precise de uma conversão explícitaVARCHAR
para atribuir um valor a elas).TEXT
é bom:VARCHAR
é bom: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
ouVARCHAR
. Isso inclui usá-lo em qualquer condiçãoJOIN
ouWHERE
.Como o
TEXT
é armazenado fora da linha, as consultas que não envolvem aTEXT
coluna geralmente são mais rápidas.Alguns exemplos do que
TEXT
é bom para:Alguns exemplos do que
VARCHAR
é bom para: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
ativadoNTEXT
eNVARCHAR
também, que você deve usar nos exemplos acima.PPS O mesmo se aplica
VARCHAR(MAX)
eNVARCHAR(MAX)
que o SQL Server 2005+ usa em vez deTEXT
eNTEXT
. Você precisará habilitálarge value types out of row
-lossp_tableoption
se quiser que eles sejam sempre armazenados fora da linha.Como mencionado acima e aqui ,
TEXT
isso será preterido em versões futuras:fonte
No SQL Server 2005, novos tipos de dados foram introduzidos:
varchar(max)
envarchar(max)
Eles têm as vantagens do tipo de texto antigo: eles podem conter 2 GB de dados, mas também têm a maioria das vantagens devarchar
envarchar
. Entre essas vantagens estão a capacidade de usar funções de manipulação de strings, como substring ().Além disso, varchar (max) é armazenado no espaço da tabela (disco / memória) enquanto o tamanho está abaixo de 8 KB. Somente quando você coloca mais dados no campo, eles são armazenados fora do espaço da tabela. Os dados armazenados no espaço da tabela são (geralmente) recuperados mais rapidamente.
Em resumo, nunca use Texto, pois existe uma alternativa melhor: (n) varchar (max). E use apenas varchar (max) quando um varchar regular não for grande o suficiente, ou seja, se você espera que a string que você armazenará excederá 8000 caracteres.
Como foi observado, você pode usar SUBSTRING no tipo de dados TEXT, mas apenas enquanto os campos TEXT contiverem menos de 8000 caracteres.
fonte
Houve algumas mudanças importantes no ms 2008 -> Pode valer a pena considerar o seguinte artigo ao tomar uma decisão sobre qual tipo de dados usar. http://msdn.microsoft.com/en-us/library/ms143432.aspx
Bytes por
fonte