Найбільша стурбованість викликає те, що 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) .