425 votes

Quelle est la signification du préfixe N dans les instructions T-SQL et quand dois-je l'utiliser ?

J'ai vu le préfixe N dans certaines requêtes T-SQL d'insertion. Beaucoup de personnes ont utilisé N avant d'insérer la valeur dans un tableau.

J'ai cherché, mais je n'ai pas réussi à comprendre quel est le but de l'inclusion de la N avant d'insérer des chaînes de caractères dans le tableau.

INSERT INTO Personnel.Employees
VALUES(N'29730', N'Philippe', N'Horsford', 20.05, 1),

À quoi sert ce préfixe "N", et quand doit-il être utilisé ?

488voto

Curt Points 42871

C'est déclarer la chaîne comme nvarchar plutôt qu'un type de données varchar

Vous avez peut-être déjà vu du code Transact-SQL qui fait passer des chaînes de caractères à l'aide de la fonction un préfixe N. Cela indique que la chaîne de caractères suivante est en Unicode (le N correspond en fait au jeu de caractères de la langue nationale). Ce qui ce qui signifie que vous transmettez une valeur NCHAR, NVARCHAR ou NTEXT, par par opposition à CHAR, VARCHAR ou TEXT.

Je cite de Microsoft :

Préfixe les constantes des chaînes de caractères Unicode avec la lettre N. le préfixe N, la chaîne est convertie en page de code par défaut de la base de données. Cette page de code par défaut peut ne pas reconnaître certains caractères .


Si vous souhaitez connaître la différence entre ces deux types de données, consultez ce post SO :

Quelle est la différence entre varchar et nvarchar ?

1 votes

@Curt ça veut dire que je devrais utiliser N uniquement lorsque j'utilise les types de données suivants CHAR, VARCHAR or TEXT ? parce que ` NCHAR, NVARCHAR ou NTEXT ` sont intrinsèquement stockés UNICODE je n'ai pas besoin de l'ajouter séparément .... est-ce vrai ?

0 votes

@Pritesh - Seulement si vous utilisez une page de code par défaut qui peut ne pas reconnaître ces caractères unicode comme dans le texte en gras ci-dessus.

5 votes

@Curt Le lien vers databases aspfaq com redirige vers des sites web extrêmement douteux ( fkref com , za1 zeroredirect1 com , i0z13 trackvoluum com ), qui ont été marquées par notre pare-feu d'entreprise comme étant des URL de pornographie, de sites malveillants et de spam. J'ai contacté le propriétaire de aspfaq.com et modifié la réponse pour supprimer le lien.

29voto

bh_earth0 Points 1294

Laissez-moi vous raconter une chose ennuyeuse qui s'est produite avec la N' préfixe - Je n'ai pas pu le réparer pendant deux jours.

La collation de ma base de données est SQL_Latin1_General_CP1_CI_AS .

Il possède un tableau avec une colonne appelée MaCol1 . Il s'agit d'un Nvarchar

Cette requête ne correspond pas à Exact Une valeur qui existe.

SELECT TOP 1 * FROM myTable1 WHERE  MyCol1 = 'ESKI'  

// 0 result

l'utilisation du préfixe N'' le corrige

SELECT TOP 1 * FROM myTable1 WHERE  MyCol1 = N'ESKI'  

// 1 result - found!!!!

Pourquoi ? Parce que latin1_general ne dispose pas de grand I pointé c'est pourquoi il échoue, je suppose.

11voto

variable Points 564

1. Performance :

Supposons que votre clause where soit comme ceci :

WHERE NAME='JON'

Si la colonne NAME est d'un type autre que nvarchar ou nchar, vous ne devez pas spécifier le préfixe N. Cependant, si la colonne NAME est de type nvarchar ou nchar, si vous ne spécifiez pas le préfixe N, alors 'JON' est traité comme non-unicode. Cela signifie que le type de données de la colonne NAME et de la chaîne 'JON' sont différents et que le serveur SQL convertit implicitement le type d'un opérande en l'autre. Si le serveur SQL convertit le type de la littérale en type de colonne, il n'y a pas de problème, mais s'il fait l'inverse, les performances seront affectées car l'index de la colonne (si disponible) ne sera pas utilisé.

2. Jeu de caractères :

Si la colonne est de type nvarchar ou nchar, utilisez toujours le préfixe N lorsque vous spécifiez la chaîne de caractères dans la clause WHERE/UPDATE/INSERT. Si vous ne le faites pas et que l'un des caractères de votre chaîne est unicode (comme les caractères internationaux - exemple - a), la requête échouera ou subira une corruption de données.

4voto

RickyRam Points 64

En supposant que la valeur est de type nvarchar, pour cela seulement, nous utilisons N''.

0voto

Haris Points 460

Cela signifie que la chaîne de caractères qui suit est en Unicode (le N correspond en fait au jeu de caractères de la langue nationale). Cela 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.

Si votre base de données ne stocke pas de données multilingues, vous pouvez continuer à utiliser Varchar. A titre d'exemple : N'abc' convertit simplement votre chaîne en unicode.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X