it-swarm.com.de

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

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

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

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

41

Die folgenden Artikel enthalten einige gute Informationen zu dieser Frage. Die kurze Antwort lautet nur, dass zwischen der verwendeten Unicode-Spalte und dem von Ihnen verwendeten Nicht-Unicode-String-Literal eine Typinkongruenz besteht. Aus dem KB-Artikel geht hervor, dass das Weglassen des N-Präfixes in einigen Fällen möglicherweise noch funktioniert, dies hängt jedoch von der Codepage und den Sortiereinstellungen der Datenbank ab. Dies könnte die Verhaltensänderung erklären, wenn Sie zuvor mit der Methode ohne Präfix erfolgreich waren.

https://support.Microsoft.com/en-us/kb/2395

31
Charlie

Dies bedeutet, dass sich die nachfolgende Zeichenfolge in Unicode befindet (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 normalerweise in Datenbankanwendungen verwendet, die Codepages ermöglichen, die über die englischen und westeuropäischen Codepages hinausgehen, beispielsweise Chinesisch. Unicode ist so konzipiert, dass erweiterte Zeichensätze weiterhin in Datenbankspalten "passen" können.

6
Gopu Krishnan

Ich denke, das N-Präfix weist den SQL Server an, die Zeichenfolge als Unicode-Wert zu behandeln. nvarchar-Spalten sind Unicode-Spalten, daher sollten Sie diese Syntax verwenden, wenn Sie auf diese Spalten zugreifen.

3
Rune Grimstad