web-dev-qa-db-fra.com

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

Pourriez-vous me dire, s'il vous plaît, quand dois-je utiliser le préfixe N avant la chaîne dans la 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 en N'%а_pattern%'. Je n'ai jamais eu à ajouter ce préfixe dans le passé, donc je suis curieux. a_field Est défini comme nvarchar(255), mais je pense que la raison est autre chose.

41

Les articles suivants contiennent de bonnes informations sur la question. La réponse courte est simplement qu'il existe une incompatibilité de type entre la colonne unicode et le littéral de chaîne non unicode que vous utilisez. D'après l'article de la base de connaissances, il semble que l'omission du préfixe N puisse toujours fonctionner dans certains cas, mais cela dépendra de la page de codes 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/2395

31
Charlie

Cela indique que la chaîne suivante est en Unicode (le N signifie en fait le jeu de caractères de 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 qui sont conçues pour faciliter les pages de codes qui s'étendent au-delà des pages de codes anglais et d'Europe occidentale, par exemple le chinois. Unicode est conçu pour que les jeux de caractères étendus puissent toujours "tenir" dans les colonnes de la base de données.

6
Gopu Krishnan

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 lors de l'accès à ces colonnes.

3
Rune Grimstad