#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
; использование правильного типа данных для литеральных строк всегда более эффективно, а также безопаснее.