Запрос SQL Server: что означает «N» перед строкой?

В SQL Server запрос

SELECT custid, country, region, city FROM Sales.Customers WHERE region = N'WA' 

в чем смысл «N» в предложении where? Я удаляю его, получаю тот же результат.

Строковые константы Unicode, которые отображаются в коде, выполняемом на сервере, например, в хранимых процедурах и триггерах, должны быть впереди заглавной буквой N Это верно, даже если упоминаемый столбец уже определен как Unicode. Без префикса N строка преобразуется в кодовую страницу по умолчанию базы данных. Это может не распознавать определенные символы.

Например, хранимая процедура, созданная в предыдущем примере, может быть выполнена на сервере следующим образом:

 EXECUTE Product_Info @name = N'Chain' 

Требование использовать префикс N применяется к строковым константам, которые исходят от сервера и отправляются с клиента.

Это литье буквальной строки Unicode.

См. Здесь официальное объяснение:

Строки Unicode имеют формат, аналогичный строкам символов, но им предшествует идентификатор N (N обозначает национальный язык в стандарте SQL-92).

Во многих случаях это не будет иметь никакого значения, если только ваш литерал не содержит символы Unicode. Если это так, и вы не учитываете явный приказ, он преобразует ваши символы Unicode в символ??:

 select 'Ộ', N'Ộ' ---- ---- ? Ộ 

«N» обозначает национальный язык и означает, что вы передаете значение для NVARCHAR , NCHAR . Типы данных, которые принимают языки, отличные от английского, начинаются с N.

Имейте в виду, что вам не требуется обертывать ваш параметр «N» для таких типов данных, как VARCHAR , CHAR, потому что они не принимают символы Unicode.

Любой другой язык, такой как арабский, фарси, будет рассматриваться как Юникод, поэтому им следует манипулировать такими типами данных, как NVARCHAR, а значения должны быть обернуты «N», как показано ниже:

 DECLARE @Name AS NVARCHAR(50); SET @Name = N'اسم'; PRINT @Name; 

Это вернет:

 اسم 

Если вы попробуете без «N»:

 DECLARE @Name AS NVARCHAR(50); SET @Name = 'اسم'; PRINT @Name; 

Это вернет

 ??? 

Это связано с тем, что вы не завернули значение с помощью «N», хотя тип данных – NVARCHAR, и система ничего не знает о слове «اسم».

Interesting Posts

Может ли таблица быть «слишком малой», чтобы получить какую-либо прибыль, индексируя ее?

Алгоритм поиска почти похожих значений

MS SQL: обновлять только последнюю запись каждой группы

Удаленное подключение SQL Server 2005 (через Интернет)

Инструменты / параметры sql предотвращают сохранение изменений

Обновления и вставки могут вызвать фрагментацию индекса, даже если вы откатите транзакцию

SELECT * FROM MySQL Linked Server с использованием SQL Server без OpenQuery

Распечатка списка описаний атрибутов на основе логических столбцов в SQL

Группировка результатов SSRS по цвету ячейки

Как использовать оконные функции в sql для получения отдельных значений?

Аутентификация конечного пользователя с использованием Neo4j

C # – Вставка нескольких строк с использованием хранимой процедуры

SQL Server – как выполнить вычисление на основе динамической формулы

DataTable Изменяет формат даты – ПОЧЕМУ?

Обрезать первый ноль после точки дважды sql-запроса

Давайте будем гением компьютера.