Skip to content

Posts

NVarchar Vs Varchar

5 de agosto de 2020 • 3 min de leitura

NVarchar Vs Varchar

Cada engenheiro que define uma nova coluna de string decide: Devo usar nvarchar ou usar varchar?

Desde que descobri nvarchar, sempre uso nvarchar. Meu pensamento é: por que usar um tipo de dado que pode não suportar um valor de texto, e você provavelmente não descobrirá uma incompatibilidade até que esteja em produção?

Ouço o argumento sobre espaço, mas espaço é barato e não vale a pena se preocupar. Eu sei o que você está pensando: o custo não importa quando o disco rígido está cheio, e concordo.

A partir do Sql Server 2008 R2, a compressão de dados é aplicada aos campos nchar e nvarchar (nvarchar(max) é excluído). Dependendo dos dados, a eficácia da compressão varia, mas com inglês, há uma compressão de 50%, o que a coloca no mesmo nível das necessidades de espaço do varchar (1).

Outra coisa a considerar é que a maioria das linguagens de programação suporta UTF-16 como tipo de string. Então, cada vez que um varchar é carregado do banco de dados, ele é convertido para UTF-16 (nvarchar-ish)

Esta resposta do StackOverflow resume nvarchar vs. varchar:

Uma coluna nvarchar pode armazenar qualquer dado Unicode. Uma coluna varchar é restrita a uma página de código de 8 bits. Algumas pessoas pensam que varchar deve ser usado porque ocupa menos espaço. Acredito que esta não é a resposta correta. Incompatibilidades de página de código são um incômodo, e Unicode é a cura para problemas de página de código. Com disco e memória baratos nos dias de hoje, realmente não há razão para perder tempo mexendo com páginas de código.

Todos os sistemas operacionais modernos e plataformas de desenvolvimento usam Unicode internamente. Ao usar nvarchar em vez de varchar, você pode evitar fazer conversões de codificação toda vez que lê ou escreve no banco de dados. As conversões levam tempo e são propensas a erros. E a recuperação de erros de conversão é um problema não trivial.

Se você está interfaceando com um aplicativo que usa apenas ASCII, eu ainda recomendaria usar Unicode no banco de dados. Os algoritmos de agrupamento do SO e do banco de dados funcionarão melhor com Unicode. Unicode evita problemas de conversão ao interfacear com outros sistemas. E você estará se preparando para o futuro. E você sempre pode validar que seus dados são restritos a ASCII de 7 bits para qualquer sistema legado que você precise manter, enquanto aproveita alguns dos benefícios do armazenamento Unicode completo. (2)

Minha conclusão é que a única vez que os dados são varchar é quando estão em repouso.

Referências:

1. Unicode Compression implementation
2. What is the difference between varchar and nvarchar?

Autor: Chuck Conway é um Engenheiro de IA com quase 30 anos de experiência em engenharia de software. Ele constrói sistemas de IA práticos—pipelines de conteúdo, agentes de infraestrutura e ferramentas que resolvem problemas reais—e compartilha o que está aprendendo ao longo do caminho. Conecte-se com ele nas redes sociais: X (@chuckconway) ou visite-o no YouTube e no SubStack.

↑ Voltar ao topo

Você também pode gostar