Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Quando devemos usar NVARCHAR/NCHAR em vez de VARCHAR/CHAR no SQL Server?


A verdadeira razão pela qual você deseja usar NVARCHAR é quando você tem diferentes idiomas na mesma coluna, você precisa endereçar as colunas em T-SQL sem decodificação, você quer poder ver os dados "nativamente" no SSMS ou quer padronizar em Unicode.

Se você tratar o banco de dados como armazenamento burro, é perfeitamente possível armazenar strings largas e codificações diferentes (mesmo de comprimento variável) em VARCHAR (por exemplo, UTF-8). O problema ocorre quando você está tentando codificar e decodificar, especialmente se a página de código for diferente para linhas diferentes. Isso também significa que o SQL Server não poderá lidar com os dados facilmente para fins de consulta no T-SQL em colunas codificadas (potencialmente variáveis).

Usar NVARCHAR evita tudo isso.

Eu recomendaria NVARCHAR para qualquer coluna que tenha dados inseridos pelo usuário que sejam relativamente irrestritos.

Eu recomendaria VARCHAR para qualquer coluna que seja uma chave natural (como uma placa de veículo, SSN, número de série, etiqueta de serviço, número de pedido, indicativo de aeroporto, etc.) que normalmente é definida e restrita por um padrão ou legislação ou convenção. Também VARCHAR para digitado pelo usuário e muito restrito (como um número de telefone) ou um código (ACTIVE/CLOSED, S/N, M/F, M/S/D/W, etc). Não há absolutamente nenhuma razão para usar NVARCHAR para isso.

Então, para uma regra simples:

VARCHAR quando garantido para ser restritoNVARCHAR caso contrário