507 Stimmen

Welche Bedeutung hat das Präfix N in T-SQL-Anweisungen und wann sollte es verwendet werden?

Ich habe gesehen, Präfix N in einigen T-SQL-Abfragen einfügen. Viele Leute haben verwendet N bevor Sie den Wert in eine Tabelle einfügen.

Ich habe nachgeforscht, aber ich konnte nicht verstehen, was der Zweck der Aufnahme der N bevor Sie Zeichenfolgen in die Tabelle einfügen.

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

Wozu dient dieses "N", und wann sollte es verwendet werden?

571voto

Curtis Punkte 98065

Sie deklariert die Zeichenkette als nvarchar Datentyp, anstatt varchar

Sie haben vielleicht schon Transact-SQL-Code gesehen, der Zeichenketten mit ein N-Präfix verwendet. Dies bedeutet, dass die nachfolgende Zeichenkette in Unicode ist ist (das N steht eigentlich für den Zeichensatz der Landessprache). Das bedeutet, dass Sie einen NCHAR-, NVARCHAR- oder NTEXT-Wert übergeben, im Gegensatz zu im Gegensatz zu CHAR, VARCHAR oder TEXT.

Um zu zitieren von Microsoft :

Präfix für Unicode-Zeichenkettenkonstanten mit dem Buchstaben N. Ohne N-Präfix wird die Zeichenkette in die Standard-Codepage der Datenbank konvertiert. Diese Standard-Codepage erkennt möglicherweise bestimmte Zeichen nicht .


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

Was ist der Unterschied zwischen varchar und nvarchar?

43voto

bh_earth0 Punkte 2221

Ich möchte Ihnen eine ärgerliche Sache erzählen, die mit dem N' Vorwahl - ich war zwei Tage lang nicht in der Lage, es zu reparieren.

Meine Datenbanksortierung ist SQL_Latin1_Allgemein_CP1_CI_AS .

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

Diese Abfrage passt nicht zu Exact Wert, der existiert.

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

// 0 result

die Verwendung der Vorsilbe N'' behebt das Problem

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

// 1 result - found!!!!

Warum? Weil latin1_general nicht über großes gepunktetes I Ich nehme an, dass es deshalb scheitert.

17voto

variable Punkte 5919

1. Leistung:

Nehmen wir an, Ihre Where-Klausel sieht folgendermaßen aus:

WHERE NAME='JON'

Wenn die Spalte NAME von einem anderen Typ als nvarchar oder nchar ist, sollten Sie das Präfix N nicht angeben. Wenn die Spalte NAME jedoch vom Typ nvarchar oder nchar ist, wird 'JON' als Nicht-Unicode behandelt, wenn Sie das Präfix N nicht angeben. Das bedeutet, dass der Datentyp der NAME-Spalte und der String 'JON' unterschiedlich sind und SQL Server den Typ des einen Operanden implizit in den anderen konvertiert. Wenn der SQL-Server den Typ des Literals in den Typ der Spalte konvertiert, gibt es kein Problem, aber wenn er es andersherum macht, wird die Leistung beeinträchtigt, weil der Index der Spalte (falls vorhanden) nicht verwendet wird.

2. Zeichensatz:

Wenn die Spalte vom Typ nvarchar oder nchar ist, dann verwenden Sie bei der Angabe der Zeichenkette in der WHERE-Kriterien/UPDATE/INSERT-Klausel immer das Präfix N. Wenn Sie dies nicht tun und eines der Zeichen in Ihrer Zeichenkette ein Unicode-Zeichen ist (z.B. internationale Zeichen - Beispiel - a), wird die Suche fehlschlagen oder die Daten werden beschädigt.

4voto

RickyRam Punkte 171

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X