существует ли оборотная сторона к помещению N перед строками в сценариях? Это считают “лучшей практикой”?

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

INSERT MyTable 
 SELECT N'the string goes here'

Есть ли любое принципиальное различие между этим и:

INSERT MyTable 
 SELECT 'the string goes here'

Мое понимание было то, что у Вас только была бы проблема, если бы строка содержала символ Unicode, и целевой столбец не был unicode. Кроме этого, SQL имеет дело с ним очень хорошо и преобразовывает строку с N'' в varchar поле (в основном игнорирует N).

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

11
задан gdoron is supporting Monica 22 December 2012 в 21:16
поделиться

3 ответа

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

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

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

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

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

3
ответ дан 3 December 2019 в 10:25
поделиться

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

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

6
ответ дан 3 December 2019 в 10:25
поделиться

От INSERT (Transact-SQL)

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

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

И

Серверное программирование с помощью Юникода

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

0
ответ дан 3 December 2019 в 10:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: