it-swarm-eu.dev

Předpona N před řetězcem v dotazu Transact-SQL

Řekl byste mi prosím, kdy bych měl použít předponu N před řetězcem v dotazu Transact-SQL? Začal jsem pracovat s databází, kde pomocí dotazu, jako je tento, nemám žádné výsledky

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

dokud nezměním vzor na N'%а_pattern%'. Nikdy jsem nemusel přidávat tuto předponu v minulosti, takže jsem zvědavý. a_field Je definován jako nvarchar(255), ale myslím, že důvodem je něco jiného.

41

Následující články obsahují několik dobrých informací o otázce. Krátká odpověď je, že existuje neshoda typu mezi sloupcem unicode a řetězcem doslovného kódu, který používáte. Z článku KB vypadá, že vynechání předpony N může v některých případech stále fungovat, ale záleží to na kódové stránce a nastavení řazení databáze. To by mohlo vysvětlit změnu chování, pokud jste dříve měli úspěch s metodou bez předpony.

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

31
Charlie

Toto označuje, že následující řetězec je v Unicode (N ve skutečnosti znamená znakovou sadu národního jazyka). Což znamená, že předáváte hodnotu NCHAR, NVARCHAR nebo NTEXT, na rozdíl od CHAR, VARCHAR nebo TEXT. Porovnání těchto typů dat viz článek 2354.

Unicode se obvykle používá v databázových aplikacích, které jsou navrženy tak, aby usnadňovaly kódové stránky, které přesahují kódové stránky anglické a západní Evropy, například čínské. Unicode je navržen tak, aby rozšířené sady znaků mohly stále „zapadat“ do sloupců databáze.

6
Gopu Krishnan

Myslím, že předpona N řekne serveru SQL, aby s řetězcem zacházel jako s hodnotou unicode. nvarchar sloupce jsou unicode, takže byste měli tuto syntaxi použít při přístupu k těmto sloupcům.

3
Rune Grimstad