web-dev-qa-db-fra.com

Quelle est la signification du préfixe N dans les instructions T-SQL?

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

J'ai cherché, mais je ne pouvais pas comprendre le but d'inclure le N avant d'insérer des chaînes dans la table.

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

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

Vous avez peut-être vu le code Transact-SQL qui fait passer des chaînes en utilisant un préfixe N. 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.

Pour citer de Microsoft :

Préfixe Constantes de chaîne de caractères Unicode avec la lettre N. Sans 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 voulez connaître la différence entre ces deux types de données, consultez cet article SO:

Quelle est la différence entre varchar et nvarchar?

384
Curt

Laissez-moi vous raconter une chose agaçante qui s’est produite avec le préfixe N': je n’ai pas pu le réparer pendant deux jours.

Le classement de ma base de données est SQL_Latin1_General_CP1_CI_AS.

Il a une table avec une colonne appelée MyCol1. C'est un Nvarchar

Cette requête ne correspond pas à Exact Valeur existante.

SELECT TOP 1 * FROM myTable1 WHERE  MyCol1 = 'ESKİ'  

// 0 result

utiliser le préfixe N '' le corrige

SELECT TOP 1 * FROM myTable1 WHERE  MyCol1 = N'ESKİ'  

// 1 result - found!!!!

Pourquoi? Parce que latin1_general n'a pas gros pointillé İ c'est pourquoi il échoue, je suppose.

16
bh_earth0

1. Performance:

Supposons que votre clause where est 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. Toutefois, si la colonne NAME est de type nvarchar ou nchar, si vous ne spécifiez pas le préfixe N, "JON" est traité comme un code non-unicode. Cela signifie que le type de données de la colonne NAME et la chaîne "JON" sont différents et que SQL Server convertit donc implicitement le type d’un opérande en un autre. Si SQL Server convertit le type du littéral en type de la colonne, il n’ya pas de problème, mais dans le cas contraire, les performances seront altéré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 lors de la spécification de la chaîne de caractères dans la clause WHERE critère/UPDATE/INSERT. Si vous ne le faites pas et si l'un des caractères de votre chaîne est unicode (comme les caractères internationaux - exemple - à), il échouera ou subira une corruption des données.

6
variable

En supposant que la valeur soit de type nvarchar, nous n'utilisons que N ''

4
RickyRam