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

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

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

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

40 голосов | спросил Alexander Prokofyev 20 +04002008-10-20T08:46:10+04:00312008bEurope/MoscowMon, 20 Oct 2008 08:46:10 +0400 2008, 08:46:10

3 ответа


29

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

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

ответил Charlie 20 +04002008-10-20T08:58:53+04:00312008bEurope/MoscowMon, 20 Oct 2008 08:58:53 +0400 2008, 08:58:53
6

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

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

ответил 20 Jpm1000000pmThu, 20 Jan 2011 14:43:04 +030011 2011, 14:43:04
3

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

ответил Rune Grimstad 23 +04002008-10-23T20:40:24+04:00312008bEurope/MoscowThu, 23 Oct 2008 20:40:24 +0400 2008, 20:40:24

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132