Префикс N перед строкой в ​​запросе Transact-SQL

41

Скажите, пожалуйста, когда мне следует использовать префикс N перед строкой в ​​запросе Transact-SQL? Я начал работать с базой данных, где я не получаю никаких результатов, используя запрос, подобный этому

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

пока я не поменяю шаблон на N'%а_pattern%'. Мне никогда не приходилось добавлять этот префикс в прошлом, поэтому мне любопытно. a_fieldопределяется как nvarchar(255), но я думаю, что причина в другом.

Александр Прокофьев
источник

Ответы:

31

В следующих статьях есть хорошая информация по этому вопросу. Короткий ответ заключается в том, что существует несоответствие типов между столбцом Unicode и строковым литералом не-Unicode, который вы используете. Из статьи KB видно, что пропуск префикса N может все еще работать в некоторых случаях, но это будет зависеть от кодовой страницы и параметров сопоставления базы данных. Это может объяснить изменение в поведении, если вы ранее имели успех с методом без префикса.

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

Чарли
источник
6

Это означает, что следующая строка в Unicode (N фактически означает набор символов на национальном языке). Это означает, что вы передаете значение NCHAR, NVARCHAR или NTEXT, а не CHAR, VARCHAR или TEXT. См. Статью № 2354 для сравнения этих типов данных.

Unicode обычно используется в приложениях баз данных, которые предназначены для облегчения кодовых страниц, которые выходят за рамки кодовых страниц на английском и западноевропейском, например на китайском. Юникод разработан так, что расширенные наборы символов могут все еще «вписываться» в столбцы базы данных.


источник
3

Я думаю, что N-префикс говорит серверу sql обрабатывать строку как значение Юникода. Столбцы nvarchar имеют Unicode, поэтому вы должны использовать этот синтаксис при доступе к этим столбцам.

Руна Гримстад
источник