Quais são as vantagens e desvantagens de usar os tipos de dados nvarchar(max)
vs. NText
no SQL Server? Como não preciso de compatibilidade com versões anteriores, nvarchar(max)
não há problema em não ser suportado em versões mais antigas do SQL Server.
Editar: Aparentemente, a pergunta também se aplica a TEXT
e IMAGE
contra varchar(max)
e varbinary(max)
, para aqueles que pesquisam esses tipos de dados posteriormente.
sql-server
sql-server-2005
sql-server-2008
text
nvarchar
David Pfeffer
fonte
fonte
VARCHAR(MAX)
é grande o suficiente para acomodar oTEXT
campo.TEXT
,NTEXT
EIMAGE
tipos de dados do SQL Server 2000 será depreciado em versão futura do SQL Server, SQL Server 2005 oferece compatibilidade com os tipos de dados, mas é recomendado o uso de novos tipos de dados que sãoVARCHAR(MAX)
,NVARCHAR(MAX)
eVARBINARY(MAX)
.fonte
ntext
sempre armazenará seus dados em uma página separada do banco de dados, enquantonvarchar(max)
tentará armazenar os dados no próprio registro do banco de dados.Então,
nvarchar(max)
é um pouco mais rápido (se você tiver um texto menor que 8 kB). Notei também que o tamanho do banco de dados aumentará um pouco mais devagar, isso também é bom.Vá
nvarchar(max)
.fonte
nvarchar(max)
é o que você deseja usar. A maior vantagem é que você pode usar todas as funções de seqüência de caracteres T-SQL nesse tipo de dados. Isso não é possível comntext
. Não estou ciente de nenhuma desvantagem real.fonte
nvarchar(max)
mas isso me limita a 4000 caracteres. E se eu quiser que um campo contenha mais do que isso?nvarchar(max)
a 4000 caracteres. Portanto, para o SQL Server Compact, não tenho escolha a não ser usarntext
em alguns casos. Quando o interromperem, suponho que precisarei apenas não atualizar alguns sites.Você aparentemente deveria usar
nvarchar(max)
:MSDN
fonte
A maior desvantagem de
Text
(junto comNText
eImage
) é que ele será removido em uma versão futura do SQL Server, como na documentação . Isso tornará seu esquema mais difícil de atualizar quando a versão do SQL Server for lançada.fonte
Queria adicionar minha experiência com a conversão. Eu tinha muitos
text
campos no código Linq2SQL antigo. Isso permitiu que astext
colunas presentes nos índices fossem reconstruídas ONLINE .Primeiro, eu conheço os benefícios há anos, mas sempre presumi que a conversão significaria algumas consultas longas e assustadoras, nas quais o SQL Server teria que reconstruir a tabela e copiar tudo, derrubando meus sites e aumentando a frequência cardíaca.
Eu também estava preocupado que o Linq2SQL pudesse causar erros se estivesse realizando algum tipo de verificação do tipo de coluna.
É um prazer informar que os comandos ALTER retornaram INSTANTANEAMENTE - portanto, eles definitivamente estão apenas alterando os metadados da tabela. Pode haver algum trabalho offline acontecendo para trazer <8000 caracteres de volta à tabela, mas o comando ALTER foi instantâneo.
Executei o seguinte para encontrar todas as colunas que precisam de conversão:
Isso me deu uma boa lista de consultas, que eu apenas selecionei e copiei para uma nova janela. Como eu disse - executar isso foi instantâneo.
O Linq2SQL é bastante antigo - ele usa um designer para o qual você arrasta tabelas. A situação pode ser mais complexa para o Código EF primeiro, mas ainda não o resolvi.
fonte
Quero acrescentar que você pode usar a cláusula .WRITE para atualizações parciais ou completas e o alto desempenho anexado a
varchar(max)/nvarchar(max)
tipos de dados.Aqui você pode encontrar um exemplo completo da
.WRITE
cláusula using .fonte