Префикс 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, поэтому вы должны использовать этот синтаксис при доступе к этим столбцам.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.