N Präfix vor der Zeichenfolge in der Transact-SQL-Abfrage

41

Würden Sie mir bitte sagen, wann ich das Präfix N vor der Zeichenfolge in der Transact-SQL-Abfrage verwenden soll? Ich habe begonnen, mit einer Datenbank zu arbeiten, bei der mit einer Abfrage wie dieser keine Ergebnisse erzielt werden

SELECT * FROM a_table WHERE a_field LIKE '%а_pattern%'

bis ich das Muster ändere auf N'%а_pattern%'. Ich musste dieses Präfix in der Vergangenheit nie hinzufügen, deshalb bin ich neugierig. a_fieldist definiert als nvarchar(255), aber ich denke, der Grund ist etwas anderes.

Alexander Prokofyev
quelle

Antworten:

31

Die folgenden Artikel enthalten einige gute Informationen zu dieser Frage. Die kurze Antwort ist nur, dass zwischen der Unicode-Spalte und dem von Ihnen verwendeten Nicht-Unicode-Zeichenfolgenliteral ein Typenkonflikt besteht. Aus dem KB-Artikel geht hervor, dass das Weglassen des N-Präfixes in einigen Fällen möglicherweise noch funktioniert, dies jedoch von den Codepage- und Sortierungseinstellungen der Datenbank abhängt. Dies könnte die Verhaltensänderung erklären, wenn Sie zuvor mit der No-Prefix-Methode erfolgreich waren.

https://support.microsoft.com/en-us/kb/239530

Charlie
quelle
6

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. In Artikel 2354 finden Sie einen Vergleich dieser Datentypen.

Unicode wird in der Regel in Datenbankanwendungen verwendet, die Codepages unterstützen, die über die Codepages in Englisch und Westeuropa hinausgehen, z. B. Chinesisch. Unicode ist so konzipiert, dass erweiterte Zeichensätze weiterhin in Datenbankspalten "passen".


quelle
3

Ich denke, das N-Präfix sagt SQL Server, die Zeichenfolge als Unicode-Wert zu behandeln. Da nvarchar-Spalten Unicode sind, sollten Sie beim Zugriff auf diese Spalten diese Syntax verwenden.

Rune Grimstad
quelle