Найбільша стурбованість викликає те, що nvarchar
використовується 2 байти на символ, тоді як varchar
використовується 1. Таким чином, nvarchar(4000)
використовується стільки ж місця для зберігання, як varchar(8000)
*.
Окрім усіх ваших персонажних даних, які потребують вдвічі більше місця для зберігання, це також означає:
- Можливо, вам доведеться використовувати короткі
nvarchar
стовпці, щоб утримувати рядки в межах граничного значення 8060 байт / межі стовпця символів 8000 байт.
- Якщо ви використовуєте
nvarchar(max)
стовпці, вони будуть витіснені з ряду раніше, ніж це varchar(max)
було б.
- Можливо, вам доведеться використовувати короткі
nvarchar
стовпці, щоб залишитися в межах 900-байтного індексу ключа (я не знаю, чому ви хотіли б використовувати такий великий індексний ключ, але ви ніколи не знаєте).
Крім того, робота з nvarchar
не дуже відрізняється, якщо припустити, що клієнтське програмне забезпечення створене для роботи з Unicode. SQL Server буде прозоро конвертувати a varchar
в nvarchar
, тому вам строго не потрібен префікс N для рядкових літералів, якщо ви не використовуєте 2-байтові (тобто Unicode) символи в літералі. Майте в виду , що кастинг nvarchar
на varbinary
врожайність різних результатів , ніж робити те ж саме з varchar
. Важливим моментом є те, що вам не доведеться одразу змінювати кожен варшар-літерал на nvarchar literal, щоб програма не працювала, що полегшує процес.
* Якщо ви використовуєте стиснення даних (достатньо легкого стиснення рядків, потрібне Enterprise Edition перед SQL Server 2016 SP1 ), ви зазвичай знайдете nchar
і nvarchar
не займете більше місця, ніж, char
і varchar
завдяки компресії Unicode (використовуючи алгоритм SCSU) .