Самая большая проблема заключается в том, что 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) .