it-swarm.com.de

Was bedeutet das Präfix N in T-SQL-Anweisungen?

Ich habe Präfix N in einigen Einfügung T-SQL-Abfragen gesehen. Viele Leute haben N verwendet, bevor sie den Wert in eine Tabelle eingefügt haben.

Ich habe gesucht, konnte aber nicht verstehen, wozu N hinzugefügt werden soll, bevor Zeichenfolgen in die Tabelle eingefügt wurden.

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

Der String wird als nvarchar -Datentyp deklariert und nicht als varchar.

Möglicherweise haben Sie Transact-SQL-Code gesehen, der Zeichenfolgen mit einem N-Präfix weitergibt. Dies bedeutet, dass die nachfolgende Zeichenfolge in Unicode vorliegt (das N steht tatsächlich für den Zeichensatz der Landessprache). Dies bedeutet, dass Sie im Gegensatz zu CHAR, VARCHAR oder TEXT einen NCHAR-, NVARCHAR- oder NTEXT-Wert übergeben.

So zitieren Sie von Microsoft :

Präfix Unicode-Zeichenfolgenkonstanten mit dem Buchstaben N. Ohne das Präfix N wird die Zeichenfolge in die Standard-Codepage der Datenbank konvertiert. Diese Standard-Codepage erkennt möglicherweise bestimmte Zeichen nicht .


Wenn Sie den Unterschied zwischen diesen beiden Datentypen kennen möchten, lesen Sie diesen SO Beitrag:

Was ist der Unterschied zwischen varchar und nvarchar?

384
Curt

Lassen Sie mich Ihnen etwas Ärgerliches erzählen, das mit dem Präfix N' passiert ist - ich konnte es zwei Tage lang nicht reparieren.

Meine Datenbanksortierung lautet SQL_Latin1_General_CP1_CI_AS.

Es hat eine Tabelle mit einer Spalte namens MyCol1. Es ist ein Nvarchar

Diese Abfrage stimmt nicht mit Exact überein Vorhandener Wert.

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

// 0 result

mit dem Präfix N '' wird das Problem behoben

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

// 1 result - found!!!!

Warum? Weil latin1_general kein großes, gepunktetes İ hat, scheitert es wohl daran.

16
bh_earth0

1. Leistung:

Angenommen, Ihre where-Klausel lautet wie folgt:

WHERE NAME='JON'

Wenn die Spalte NAME einen anderen Typ als nvarchar oder nchar hat, sollten Sie das Präfix N nicht angeben. Wenn die Spalte NAME jedoch vom Typ nvarchar oder nchar ist und Sie das Präfix N nicht angeben, wird 'JON' als Nicht-Unicode behandelt. Dies bedeutet, dass der Datentyp der NAME-Spalte und der Zeichenfolge 'JON' unterschiedlich sind. Daher konvertiert SQL Server implizit den Typ eines Operanden in den anderen. Wenn der SQL Server den Literal-Typ in den Spaltentyp konvertiert, gibt es kein Problem. Wenn dies jedoch anders erfolgt, wird die Leistung beeinträchtigt, da der Index der Spalte (falls verfügbar) nicht verwendet wird.

2. Zeichensatz:

Wenn die Spalte vom Typ nvarchar oder nchar ist, verwenden Sie immer das Präfix N, während Sie die Zeichenfolge in der WHERE-Bedingung/UPDATE/INSERT-Klausel angeben. Wenn Sie dies nicht tun und eines der Zeichen in Ihrer Zeichenfolge ein Unicode ist (wie internationale Zeichen - Beispiel - ®), schlägt dies fehl oder es kommt zu einer Beschädigung der Daten.

6
variable

Angenommen, der Wert ist vom Typ nvarchar, dann verwenden wir nur N ''.

4
RickyRam