В настоящее время мы используем нашу базу данных SQL Server 2012 varchar
, и мы хотели бы изменить это nvarchar
. Я создал скрипт для этого.
Мой вопрос: есть ли различия в том, как SQL Server пишет в varchar
столбцы по сравнению со nvarchar
столбцами? У нас есть ряд внутренних процедур, которые меня беспокоят.
Редактировать:
Не уверен, что это помогает, но столбцы не имеют индексов, f / k или ограничений на них.
sql-server
varchar
Крис Л
источник
источник
Ответы:
Вы должны быть уверены, что префикс строковых литералов Unicode имеет префикс N. Например, они будут работать по-другому, если базовый тип данных
NVARCHAR
:Результаты:
Для тех, кто работает на мобильных устройствах или в дряхлых браузерах, в которых вместо стандартных символов Unicode отображаются прямоугольники, это выглядит так:
источник
Самая большая проблема заключается в том, что
nvarchar
используется 2 байта на символ, тогда какvarchar
используется 1. Таким образом,nvarchar(4000)
используется тот же объем памяти, что иvarchar(8000)
*.В дополнение ко всем вашим данным персонажей, требующим вдвое больше места для хранения, это также означает:
nvarchar
столбцы, чтобы сохранить строки в пределах 8060 байт / 8000 байт.nvarchar(max)
столбцы, они будут вытеснены из строки раньше, чемvarchar(max)
будут.nvarchar
столбцы, чтобы остаться в пределах ограничения на индексный ключ в 900 байт (я не знаю, почему вы захотите использовать такой большой индексный ключ, но вы никогда не знаете).Кроме того, работа с
nvarchar
не сильно отличается, если предположить, что ваше клиентское программное обеспечение построено для обработки Unicode. SQL Server будет прозрачно реконвертированиеvarchar
кnvarchar
, поэтому строго не нужен N префикса для строковых литералов , если вы не используете 2-байты (т.е. Unicode) символы в буквальном. Имейтеnvarchar
вvarbinary
виду, что приведение к дает другие результаты, чем при том жеvarchar
. Важным моментом является то, что вам не нужно сразу менять каждый литерал varchar на литерал nvarchar, чтобы приложение работало, что помогает упростить процесс.* Если вы используете сжатие данных (достаточно простого сжатия строк, требуется Enterprise Edition до SQL Server 2016 с пакетом обновления 1 ), вы, как правило, находите
nchar
иnvarchar
занимает не больше места, чемchar
иvarchar
из-за сжатия Unicode (с использованием алгоритма SCSU) .источник
Подумайте о следующих основных различиях:
источник
nvarchar был необходим для репликации слиянием RDP из мобильной базы данных в SQL Server 2005. Также использовались LTrim (), RTrim () и Trim (), bc nvarchar не автоматически обрезал () пробелы от ввода данных, тогда как Varchar делал ,
Я не знаю, изменилось ли это в последние годы или нет, но теперь nvarchar - это стандарт, используемый для входа на сайт .NET Simple Membership на VS Pro 2017, который используется в созданной базе данных.
источник
Если вы используете NVarchar поверх Varchar и у вас нет требований поддерживать MULTI-LINQUAL, вы увеличиваете объем хранилища для БД, резервных копий (локальных и внешних). Современные базы данных должны поддерживать оба варианта, и в проекте должны учитываться любые совпадения конверсий.
источник