Atualmente, em nosso banco de dados do SQL Server 2012, estamos usando varchar
e gostaríamos de mudar isso nvarchar
. Eu gerei um script para fazer isso.
Minha pergunta é: existem diferenças em como o SQL Server grava em varchar
colunas vs. nvarchar
colunas? Temos vários procedimentos de back-end que me preocupam.
Editar:
Não tenho certeza se isso ajuda, mas as colunas não têm índices, f / k ou restrições nelas.
sql-server
varchar
Chris L
fonte
fonte
Respostas:
Você precisa ter o prefixo de literais de seqüência de caracteres Unicode com um prefixo N. Por exemplo, eles funcionarão de maneira diferente se o tipo de dados subjacente for
NVARCHAR
:Resultados:
Para aqueles em dispositivos móveis ou navegadores decrépitos que mostram caracteres de caixa em vez de caracteres Unicode reais, é assim:
fonte
A maior preocupação é que
nvarchar
use 2 bytes por caractere, enquantovarchar
usa 1. Portanto,nvarchar(4000)
usa a mesma quantidade de espaço de armazenamento quevarchar(8000)
*.Além de todos os dados de seu personagem precisarem do dobro do espaço de armazenamento, isso também significa:
nvarchar
colunas mais curtas para manter as linhas dentro do limite da linha de 8060 bytes / 8000 caracteres.nvarchar(max)
colunas, elas serão enviadas para fora da linha mais cedo do que ovarchar(max)
faria.nvarchar
colunas mais curtas para permanecer dentro do limite da chave de índice de 900 bytes (não sei por que você desejaria usar uma chave de índice tão grande, mas nunca sabe).Além disso, trabalhar com
nvarchar
não é muito diferente, supondo que o software do cliente seja construído para lidar com Unicode. O SQL Server converterá de forma transparente um upvarchar
paranvarchar
, para que você não precise estritamente do prefixo N para literais de string, a menos que esteja usando caracteres de 2 bytes (ou seja, Unicode) no literal. Esteja ciente de que a conversãonvarchar
paravarbinary
produzir resultados diferentes do que fazer o mesmo comvarchar
. O ponto importante é que você não precisará alterar imediatamente todo literal varchar para um literal nvarchar para manter o aplicativo funcionando, o que ajuda a facilitar o processo.* Se você usar a compactação de dados (a compactação leve de linha é suficiente, é necessário o Enterprise Edition antes do SQL Server 2016 SP1 ), normalmente você encontrará
nchar
envarchar
não ocupará mais espaço do quechar
evarchar
, devido à compactação Unicode (usando o algoritmo SCSU) .fonte
Pense no seguinte são as principais diferenças:
fonte
nvarchar era necessário para a replicação de mesclagem RDP de um banco de dados móvel para o SQL Server 2005. Também LTrim (), RTrim () e Trim () foram usados muito bc nvarchar não aparou automaticamente () os espaços da entrada de dados, enquanto Varchar .
Não sei se isso mudou nos últimos anos ou não, mas agora o nvarchar é o padrão usado para logons do site de associação simples do .NET no VS Pro 2017 usado no banco de dados gerado.
fonte
Se você usa o NVarchar sobre Varchar e não precisa de suporte para MULTI-LINQUAL, aumenta o armazenamento para DB, Backups (local e externo). Os bancos de dados modernos devem oferecer suporte a ambos, e qualquer ocorrência de conversão deve ser considerada no design.
fonte