Prefixo N antes da sequência na consulta Transact-SQL


41

Você poderia me dizer, por favor, quando devo usar o prefixo N antes da string na consulta Transact-SQL? Comecei a trabalhar com um banco de dados em que não obtive nenhum resultado usando uma consulta como esta

SELECT * FROM a_table WHERE a_field LIKE '%а_pattern%'

até alterar o padrão para N'%а_pattern%'. Eu nunca tive que adicionar esse prefixo no passado, por isso estou curioso. a_fieldé definido como nvarchar(255), mas acho que o motivo é outra coisa.

Respostas:


31

Os artigos a seguir têm boas informações sobre a questão. A resposta curta é apenas que há uma incompatibilidade de tipo entre a coluna unicode e a string literal não unicode que você está usando. No artigo da KB, parece que a omissão do prefixo N ainda pode funcionar em alguns casos, mas dependerá da página de código e das configurações de agrupamento do banco de dados. Isso pode explicar a mudança de comportamento, se você estava tendo sucesso anteriormente com o método sem prefixo.

https://support.microsoft.com/en-us/kb/239530


6

Isso indica que a sequência subsequente está em Unicode (o N realmente significa conjunto de caracteres do idioma nacional). O que significa que você está passando um valor NCHAR, NVARCHAR ou NTEXT, em oposição a CHAR, VARCHAR ou TEXT. Veja o artigo 2354 para uma comparação desses tipos de dados.

O Unicode é normalmente usado em aplicativos de banco de dados projetados para facilitar as páginas de código que se estendem além das páginas de código em inglês e na Europa Ocidental, por exemplo, chinês. O Unicode foi projetado para que conjuntos de caracteres estendidos ainda possam "caber" nas colunas do banco de dados.


3

Eu acho que o prefixo N diz ao servidor sql para tratar a string como um valor unicode. As colunas nvarchar são unicode, portanto, você deve usar esta sintaxe ao acessar essas colunas.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.