Начиная с SQL Server 2019 (в настоящее время находится в бета-версии / «Предварительный просмотр сообщества»), существует встроенная поддержка UTF-8 посредством новой серии сопоставлений UTF-8. ОДНАКО, возможность использовать UTF-8 не означает, что вы должны. Есть определенные недостатки использования UTF-8, такие как:
- Только первые 128 кодовых точек занимают 1 байт (то есть стандартный 7-битный набор ASCII)
- Следующие почти 2000 кодовых точек занимают 2 байта, следовательно, нет экономии пространства по сравнению с UTF-16 /
NVARCHAR
- Остальные 63 тыс. Кодовых точек в BMP (т. Е. Диапазон U + 0800 - U + FFFF) - все 3 байта, следовательно, на 1 байт больше, чем тот же символ в UTF-16 /
NVARCHAR
.
- Просто укажите: дополнительные символы имеют 4 байта в обеих кодировках, так что нет никакой разницы между ними
- Несмотря на то, что вы можете сэкономить место с помощью UTF-8, есть очень хороший шанс, что для этого вы снизите производительность.
На самом деле это сводится к следующему: UTF-8 - это дизайн формата хранения, позволяющий 8-разрядным системам (которые обычно были разработаны с использованием расширенных кодовых страниц ASCII и ASCII) использовать Юникод без каких-либо нарушений или каких-либо изменений существующих файлы, чтобы держать вещи в рабочем состоянии. UTF-8 отлично подходит для файловых систем и сетей, но данные, хранящиеся внутри SQL Server, тоже нет. Тот факт, что данные, которые оказываются в основном (или полностью) в пределах стандартного диапазона ASCII, требует меньше места, чем те же данные при хранении в формате UTF-16 /, NVARCHAR
является побочным эффектом. Конечно, это побочный эффект, который может оказаться полезным, но это решение должен принять тот, кто понимает как данные, так и последствия / недостатки этого решения. Этоне функция для общего пользования.
Кроме того, основной сценарий использования UTF-8 (в SQL Server) предназначен для кода приложения, уже использующего UTF-8, возможно, уже с другой СУБД, которая его поддерживает, и нет никакого желания или возможности обновлять код приложения / схему БД использовать NVARCHAR
типы данных (для таблиц, переменных, параметров и т. д.) или префикс строковых литералов заглавными буквами «N». Цель аналогична причине существования UTF-8: разрешить коду приложения использовать Unicode без изменения общей структуры или отображения недействительных существующих данных. Если это описывает вашу ситуацию, тогда используйте UTF-8, но имейте в виду, что в ней все еще есть несколько ошибок / проблем.
Если у вас нет явной необходимости работать с Юникодом без использования NVARCHAR
строковых литералов с префиксом N или заглавными буквами «N», то единственный другой сценарий, в котором UTF-8 является преимуществом, - это наличие МНОГО в основном стандартных данных ASCII, которые необходимо учитывать Используемые вами символы Юникода NVARCHAR(MAX)
(это означает, что сжатие данных не будет работать), и таблица часто обновляется (поэтому индекс кластерного хранилища столбцов, вероятно, не поможет).
Для получения полной информации, пожалуйста, смотрите мой пост:
Собственная поддержка UTF-8 в SQL Server 2019: Спаситель или Лжепророк?