Починаючи з SQL Server 2019 (зараз у бета-версії / «Community Tech Preview»), існує вбудована підтримка UTF-8 через нову серію зібрань UTF-8. ЯКЩО мати можливість використовувати UTF-8 не означає, що слід. Існують певні недоліки використання UTF-8, такі як:
- Тільки перші 128 кодових точок мають 1 байт (тобто стандартний 7-бітний набір ASCII)
- Наступні майже 2000 кодових пунктів - 2 байти, отже, економія місця на UTF-16 /
NVARCHAR
- Решта 63k кодових точок у BMP (тобто діапазон U + 0800 - U + FFFF) - всі 3 байти, отже, на 1 байт більше, ніж той самий символ у UTF-16 /
NVARCHAR
.
- Просто зазначайте: Додаткові символи - це 4 байти в обох кодуваннях, тому різниці у просторі немає
- Незважаючи на те, що ви можете заощадити місце за допомогою UTF-8, є дуже хороший шанс, що ви скористаєтеся його ефективністю.
Що насправді зводиться до цього: UTF-8 - це формату формату пам’яті, яка дозволяє 8-бітовим системам (як правило, розробленим навколо ASCII та ASCII Extended - Code Pages) використовувати Unicode, не порушуючи нічого і не вимагаючи будь-яких змін існуючих файли, щоб зберегти роботу. UTF-8 чудовий для файлових систем та мереж, але дані, що зберігаються всередині SQL Server, не є жодним. Той факт, що дані, які просто трапляються в основному (або цілком) у стандартному діапазоні ASCII, вимагають менше місця, ніж ті самі дані, коли вони зберігаються як UTF-16 /, NVARCHAR
є побічним ефектом. Звичайно, це може бути корисним побічний ефект, але це рішення повинен прийняти той, хто розуміє як дані, так і наслідки / недоліки цього рішення. Цене є функцією для загального користування.
Крім того, основний випадок використання UTF-8 (на SQL Server) - це код програми, який вже використовує UTF-8, можливо, вже з іншою RDBMS, яка його підтримує, і немає бажання чи можливості оновити код програми / схему БД використовувати NVARCHAR
типи даних (для таблиць, змінних, параметрів тощо) або префікс рядкових літералів з великого регістру "N". Мета така ж, як і причина існування UTF-8: увімкнути код програми для використання Unicode без зміни загальної структури або надання існуючих даних недійсними. Якщо це описує вашу ситуацію, тоді використовуйте UTF-8, але пам’ятайте, що в ньому є ще кілька помилок / проблем.
Якщо у вас немає явної потреби в роботі Unicode без використання NVARCHAR
літери-літери з префіксом рядка "N", то єдиний інший сценарій, де UTF-8 є перевагою, - якщо у вас є багато здебільшого стандартних даних ASCII, для яких потрібно враховувати Unicode символи, які ви використовуєте NVARCHAR(MAX)
(це означає, що стискання даних не буде працювати), і таблиця оновлюється часто (тому індекс кластерних стовпців, ймовірно, не допоможе по-справжньому).
Для отримання детальної інформації, будь ласка, дивіться мій пост:
Рідна підтримка UTF-8 у SQL Server 2019: рятівник чи помилковий пророк?