Я видел этот запрос где-то -«N» в ИНЕКЕ SQL
SELECT *
FROM HR.Employees
WHERE country <> N'JAP';
Что это «N» означает? Я не уверен, что это действительно только для SQL-сервера.
Я видел этот запрос где-то -«N» в ИНЕКЕ SQL
SELECT *
FROM HR.Employees
WHERE country <> N'JAP';
Что это «N» означает? Я не уверен, что это действительно только для SQL-сервера.
N обозначает «национальный символ», а это означает, что содержимое строки равно Unicode.
Вы должны использовать Unicode (nchar
//nvarchar
), когда вы можете найти собственные имена или другие объекты, которые могут содержать символы за пределами набора символов ASCII по умолчанию. Если вы не окружите такие строки префиксом N
, вы потеряете данные. Например:
SELECT N'ук ферт хер', 'ук ферт хер';
Результаты:
----------- -----------
ук ферт хер ?? ???? ???
Вы также должны быть уверены, чтобы использовать префикс N
в ваших WHERE
или других пунктов против n(var)char
колонн. Если вы не используете префикс N
, вы можете столкнуться с серьезными проблемами производительности из-за неявного преобразования.
Дополнительная информация взята из книги - http://www.amazon.com/Training-Kit-Exam-70-461-Microsoft/dp/0735666059
Если вы напишете выражение, которое включает в себя операнды разных типов, SQL Server придется применить неявное преобразование для выравнивания типов. В зависимости от обстоятельств неявные преобразования иногда могут повредить производительность. Важно знать правильную форму литералов разных типов и убедиться, что вы используете правильные. Классический пример использования неправильных типов литералов - это строки символов Unicode (типы NVARCHAR и NCHAR).
Правильная форма для символьного символа строки Юникода - это префикс литерала со значением капитала N и разграничение литерала с одинарными кавычками; например, N'literal '. Для регулярного символьного строкового литерала вы просто ограничиваете литерал одиночными кавычками; например, «литерал». Очень типичная дурная привычка указывать литерал строчной строки, когда отфильтрованный столбец относится к типу Unicode, как в следующем примере.
SELECT empid, firstname, lastname
FROM HR.Employees
WHERE lastname = 'Davis';
Поскольку столбец и буквальным имеют различные типы, SQL Server неявно преобразует тип одного операнда к другому. В этом примере, к счастью, SQL Server преобразует тип литерала в тип столбца, поэтому он все еще может эффективно полагаться на индексирование. Однако могут быть случаи, когда неявное преобразование ухудшает производительность. Рекомендуется использовать правильную форму, как в следующем.
SELECT empid, firstname, lastname
FROM HR.Employees
WHERE lastname = N'Davis';
Могу ли я найти ссылку для получения более подробной информации? Я попробовал Google, но не получил информацию. Это вид результатов поиска, которые я получаю: http://stackoverflow.com/questions/3895387/whats-the-sql-national-character-nchar-datatype-really-for – Steam
+1 Я знаю, что это был Unicode навсегда и никогда не потрудился выяснить, что означало N. –
@blasto [много информации здесь] (http://en.wikipedia.org/wiki/Unicode). –