N préfixe avant chaîne dans une requête Transact-SQL

41

Pourriez-vous me dire, s'il vous plaît, quand devrais-je utiliser le préfixe N avant la chaîne dans une requête Transact-SQL? J'ai commencé à travailler avec une base de données où je n'obtiens aucun résultat en utilisant une requête comme celle-ci.

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

jusqu'à ce que je change de modèle à N'%а_pattern%'. Je n'ai jamais eu à ajouter ce préfixe dans le passé, alors je suis curieux. a_fieldest défini comme nvarchar(255), mais je pense que la raison est autre chose.

Alexandre Prokofyev
la source

Réponses:

31

Les articles suivants contiennent de bonnes informations sur la question. La réponse courte est simplement qu'il y a une incompatibilité de type entre la colonne unicode et le littéral de chaîne non-unicode que vous utilisez. Dans l'article de la Base de connaissances, il semble que l'omission du préfixe N puisse encore fonctionner dans certains cas, mais cela dépend de la page de code et des paramètres de classement de la base de données. Cela pourrait expliquer le changement de comportement si vous aviez déjà réussi avec la méthode sans préfixe.

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

Charlie
la source
6

Cela indique que la chaîne suivante est en Unicode (le N représente en fait le jeu de caractères de la langue nationale). Ce qui signifie que vous transmettez une valeur NCHAR, NVARCHAR ou NTEXT, par opposition à CHAR, VARCHAR ou TEXT. Voir l'article 2354 pour une comparaison de ces types de données.

Unicode est généralement utilisé dans les applications de base de données conçues pour faciliter la création de pages de codes au-delà des pages de codes en anglais et en Europe occidentale, par exemple en chinois. Unicode est conçu pour que les jeux de caractères étendus puissent toujours "s'intégrer" dans les colonnes de la base de données.


la source
3

Je pense que le préfixe N indique au serveur SQL de traiter la chaîne comme une valeur Unicode. Les colonnes nvarchar sont unicode, vous devez donc utiliser cette syntaxe pour accéder à ces colonnes.

Rune Grimstad
la source