Есть ли обратная сторона в том, чтобы поставить N перед строками в скриптах? Это считается «лучшей практикой»? - PullRequest
11 голосов
/ 26 апреля 2010

Допустим, у меня есть таблица с полем varchar. Если я сделаю вставку, как это:

INSERT MyTable 
 SELECT N'the string goes here'

Есть ли принципиальная разница между этим и:

INSERT MyTable 
 SELECT 'the string goes here'

Насколько я понимаю, проблема возникнет только в том случае, если строка содержит символ Unicode, а целевой столбец не является Unicode. Кроме этого, SQL прекрасно с этим справляется и преобразует строку с N'' в поле varchar (в основном игнорирует N).

У меня сложилось впечатление, что N перед строками - хорошая практика, но я не могу найти ни одного обсуждения этого, которое я бы счел окончательным.

Ответы [ 3 ]

6 голосов
/ 26 апреля 2010

Строки должны начинаться с N, если они предназначены для столбца или параметра nvarchar(...). Если они предназначены для столбца или параметра varchar(...), пропустите его, в противном случае вы получите ненужное преобразование.

Это определенно не лучшая практика - ставить N перед каждой строкой, независимо от того, для чего она нужна.

3 голосов
/ 26 апреля 2010

Краткий ответ: отлично для сценариев, плохо для производственного кода.

Это не считается лучшей практикой. Есть и обратная сторона, это создает незначительный удар по производительности, поскольку 2-байтовые символы преобразуются в 1-байтовые символы.

Если вы не знаете, куда идет вставка, или не знаете, откуда исходит исходный текст (скажем, это утилита вставки данных общего назначения, которая генерирует операторы вставки для неизвестной цели, например, при экспорте данных ), N'foo 'может быть более защитным стилем кодирования.

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

Однако, если рассматриваемый код предназначен для повторного использования в среде, в которой вы заботитесь о качестве кода, вам не следует использовать N'the string', поскольку вы добавляете преобразование, в котором нет необходимости.

0 голосов
/ 26 апреля 2010

С INSERT (Transact-SQL)

При ссылке на символ Unicode типы данных nchar, nvarchar и ntext, 'выражение' должно начинаться с префикса заглавная буква «N».

Также есть чтение на Почему некоторые строки SQL имеют префикс 'N'?

И

Программирование на стороне сервера с Unicode

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...