Запрос в SQL Server, где поле = N’0′

#sql #sql-server #string #where-clause

#sql #sql-сервер #строка #where-предложение

Вопрос:

У меня есть несколько запросов, с которыми я не знаком, может быть, все вы можете это объяснить, пожалуйста

 Select * 
From TableA 
Where field1 = N'FAIL' And field2 = N'0'
  

N'FAIL' или N'0' => что это значит? Можем ли мы использовать это условие для получения более эффективного запроса?

Этот запрос такой же, как этот?

 select * 
from TableA 
where field1 = 'FAIL' and field2 = '0'
  

Я надеюсь, что смогу получить некоторые ответы, спасибо

Комментарии:

1. Префикс N означает, что это литерал национального символа (Unicode).

2. Обратите внимание, что в таблицах есть столбцы , а не поля.

3. если вы используете nvarchar / nchar в качестве типа данных, то лучше использовать N перед буквальным, чтобы избежать неявного преобразования

Ответ №1:

N'FAIL' является литералом NVARCHAR . 'FAIL' является литералом VARCHAR .

Это два разных типа данных: оба являются строками переменной длины (с максимальной длиной), однако NVARCHAR в них хранятся как символы Юникода, так и не-Юникода, при этом VARCHAR поддерживаются только символы, отличные от Юникода. Размер хранилища NVARCHAR больше, если у вас есть символы Юникода (2 байта на символ в Юникоде, по сравнению с 1 байтом на символ в не-Юникоде).

Какой из них следует использовать в вашем заявлении, зависит от фактического типа данных столбца, с которым сравнивается значение. Если столбец NVARCHAR , используйте NVACHAR литералы, иначе используйте VARCHAR ; использование правильного типа данных для литеральных строк всегда более эффективно, а также безопаснее.