SQL Server tipo de texto tipo de dados vs. varchar [fechado]
-
05-09-2019 - |
Pergunta
Eu tenho dados de caracteres de comprimento variável e quer armazenar em SQL Server (2005) banco de dados. Eu quero aprender algumas das melhores práticas sobre como escolher TEXTO tipo SQL ou escolher VARCHAR SQL tipo, prós e contras na performance / footprint / função.
Solução
Se você estiver usando SQL Server 2005 ou mais tarde, o uso varchar(MAX)
. O tipo de dados text
é obsoleto e não deve ser usado para novos trabalhos de desenvolvimento. De os docs :
Importante
ntext
,text
eimage
tipos de dados será removido em uma versão futura do Microsoft SQL Server. Evitar o uso desses tipos de dados em novos trabalhos de desenvolvimento e planeje modificar os aplicativos que atualmente usam-los. Use nvarchar (max) , varchar (max) , e varbinary (max) .
Outras dicas
TEXT
é usado para grandes peças de dados de cadeia. Se o comprimento do campo exceeed um certo limite, o texto é 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ê recebe 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)
Estas limitações de comprimento não dizem respeito VARCHAR(MAX)
em SQL Server 2005 , que pode ser armazenado fora da linha, assim como TEXT
.
Note que MAX
não é um tipo de constante aqui, VARCHAR
e VARCHAR(MAX)
são muito diferentes tipos, sendo este último muito perto TEXT
.
Em versões anteriores do SQL Server você não pode acessar o TEXT
diretamente, você só poderia obter um TEXTPTR
e usá-lo em funções READTEXT
e WRITETEXT
.
Em SQL Server 2005 você pode diretamente colunas acesso TEXT
(embora você ainda precisa de uma conversão explícita para VARCHAR
para atribuir um valor para eles).
TEXT
é bom:
- Se você precisar armazenar grandes textos em seu banco de dados
- Se você não pesquisar sobre o valor da coluna
- Se você selecionar esta coluna raramente e não participar nele.
VARCHAR
é bom:
- Se você armazenar pequenas cordas
- Se você procurar no valor da cadeia
- Se você sempre selecioná-lo ou usá-lo na junta.
Por selecionando aqui eu quero dizer a emissão de quaisquer consultas que retornam o valor da coluna.
Por Pesquisar aqui eu quero dizer a emissão de quaisquer consultas cujo resultado depende do valor da coluna TEXT
ou VARCHAR
. Isto inclui a usá-lo em qualquer condição JOIN
ou WHERE
.
Como o TEXT
é armazenado fora da linha, as consultas que não envolvem a coluna TEXT
são geralmente mais rápido.
Alguns exemplos do que TEXT
é bom para:
- Comentários do blog
- páginas Wiki
- fonte Código
Alguns exemplos do que VARCHAR
é bom para:
- Nomes de usuários
- Os títulos das páginas
- Os nomes de arquivos
Como regra geral, se você precisar de você valor de texto para exceder 200 caracteres e Não use se juntar nessa coluna, o uso TEXT
.
Caso contrário uso VARCHAR
.
P.S. O mesmo se aplica a UNICODE
habilitado NTEXT
e NVARCHAR
bem, o que você deve usar para exemplos acima.
P.P.S. O mesmo se aplica a VARCHAR(MAX)
e NVARCHAR(MAX)
que SQL Server 2005 + usa em vez de TEXT
e NTEXT
. Você precisa ativar large value types out of row
para eles com sp_tableoption
se você quer que eles sejam sempre armazenados fora da linha.
Como mencionado acima e aqui , TEXT
vai ser preterido em versões futuras:
A opção
text in row
será removido em uma versão futura do SQL Server . Evite usar esta opção em novos trabalhos de desenvolvimento e planeje modificar os aplicativos que atualmente usamtext in row
. É recomendável que você armazenar grandes volumes de dados usando os tiposvarchar(max)
,nvarchar(max)
, ou dadosvarbinary(max)
. Para controlo em linha e fora de linha comportamento destes tipos de dados, use a opçãolarge value types out of row
.
No SQL Server 2005 novos tipos de dados foram introduzidos: varchar(max)
e nvarchar(max)
Eles têm as vantagens do tipo texto antigo: eles podem conter op 2 GB de dados, mas eles também têm a maioria das vantagens de varchar
e nvarchar
. Entre estas vantagens estão a capacidade de manipulação de cadeia funções utilização tal como subsequência ().
Além disso, varchar (max) é armazenado em (disco / memória) da tabela espaço, enquanto o tamanho está abaixo 8Kb. Somente quando você colocar mais dados no campo, é armazenada fora do espaço da tabela. Os dados armazenados no espaço da mesa é (geralmente) recuperou mais rápido.
Em suma, nunca use texto, como não há uma alternativa melhor: (n) varchar (max). E só usar varchar (max) quando um varchar regular não é grande o suficiente, ou seja, se você espera teh cadeia de caracteres que você está indo para loja vai exceder 8000 caracteres.
Como foi observado, você pode usar SUBSTRING sobre o tipo de dados de texto, mas apenas enquanto os campos de texto contém menos de 8000 caracteres.
Tem havido algumas mudanças importantes em ms 2008 -> Pode valer a pena considerar o seguinte artigo ao fazer uma decisão sobre que tipo de dados para uso. http://msdn.microsoft.com/en-us/library/ms143432.aspx
Bytes por
- varchar (max), varbinary (max), xml, texto ou imagem coluna 2 ^ 31-1 2 ^ 31-1 coluna
- nvarchar (máx) 2 ^ 30-1 2 ^ 30-1