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 devo usar varchar?

Desde que descobri o nvarchar, sempre uso nvarchar. Meu pensamento é: por que usar um tipo de dados que pode não suportar um valor de texto, e você provavelmente não descobrirá um valor incompatível 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. 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 deveria 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 problema, e Unicode é a cura para problemas de página de código. Com disco e memória baratos hoje em dia, 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. 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á fazendo interface com uma aplicação que usa apenas ASCII, eu ainda recomendaria usar Unicode no banco de dados. Os algoritmos de collation do SO e do banco de dados funcionarão melhor com Unicode. Unicode evita problemas de conversão ao fazer interface com outros sistemas. E você estará se preparando para o futuro. E você sempre pode validar que seus dados estão restritos a ASCII de 7 bits para qualquer sistema legado que você tenha que manter, mesmo enquanto desfruta de 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 é especialista em engenharia de software e IA Generativa. Conecte-se com ele nas redes sociais: X (@chuckconway) ou visite-o no YouTube.

↑ Voltar ao topo

Você também pode gostar