Dimulai pada SQL Server 2019 (saat ini dalam versi beta / "Komunitas Tek Preview"), ada dukungan asli untuk UTF-8 melalui seri baru UTF-8 collations. NAMUN, memiliki kemampuan untuk menggunakan UTF-8 tidak berarti Anda harus melakukannya. Ada beberapa kekurangan untuk menggunakan UTF-8, seperti:
- Hanya 128 titik kode pertama yang 1 byte (yaitu set ASCII 7-bit standar)
- Hampir 2000 poin kode berikutnya adalah 2 byte, karenanya tidak ada penghematan ruang pada UTF-16 /
NVARCHAR
- Poin kode 63k yang tersisa dalam BMP (yaitu kisaran U + 0800 - U + FFFF) semuanya 3 byte, karenanya 1 byte lebih besar dari karakter yang sama dalam UTF-16 /
NVARCHAR
.
- Katakan saja: Karakter Tambahan adalah 4 byte di kedua pengkodean, jadi tidak ada perbedaan ruang di sana
- Meskipun Anda dapat menghemat ruang menggunakan UTF-8, ada peluang yang sangat baik bahwa Anda akan terpukul kinerja untuk melakukannya.
Apa yang sebenarnya terjadi adalah ini: UTF-8 adalah desain format penyimpanan untuk mengaktifkan sistem 8-bit (yang biasanya dirancang di sekitar ASCII dan ASCII Extended - Code Pages) untuk menggunakan Unicode tanpa merusak apa pun atau memerlukan modifikasi apa pun yang ada file agar tetap berjalan. UTF-8 sangat bagus untuk sistem file dan jaringan, tetapi data yang disimpan di dalam SQL Server juga tidak. Fakta bahwa data yang kebetulan sebagian besar (atau seluruhnya) dalam rentang ASCII standar membutuhkan lebih sedikit ruang daripada data yang sama ketika disimpan sebagai UTF-16 / NVARCHAR
adalah efek samping. Tentu, ini adalah efek samping yang terbukti bermanfaat, tetapi keputusan itu perlu dibuat oleh seseorang yang memahami data dan konsekuensi / kelemahan dari keputusan ini. Ini adalahbukan fitur untuk penggunaan umum.
Juga, use case utama untuk UTF-8 (dalam SQL Server) adalah untuk kode aplikasi yang sudah menggunakan UTF-8, mungkin sudah dengan RDBMS lain yang mendukungnya, dan tidak ada keinginan atau kemampuan untuk memperbarui kode aplikasi / skema DB untuk menggunakan NVARCHAR
tipe data (untuk tabel, variabel, parameter, dll), atau untuk awalan string literal dengan huruf besar "N". Tujuannya sama dengan alasan UTF-8 yang ada: memungkinkan kode aplikasi untuk menggunakan Unicode tanpa mengubah struktur keseluruhan atau membuat data yang ada tidak valid. Jika ini menggambarkan situasi Anda, maka gunakan UTF-8, tetapi perlu diketahui bahwa masih ada beberapa bug / masalah dengan itu.
Jika Anda tidak memiliki kebutuhan eksplisit untuk Unicode yang bekerja tanpa menggunakan NVARCHAR
atau huruf kapital string awalan "N", maka satu-satunya skenario di mana UTF-8 adalah manfaat adalah jika Anda memiliki BANYAK sebagian besar data ASCII standar yang perlu untuk memungkinkan Karakter Unicode, dan Anda menggunakan NVARCHAR(MAX)
(yang berarti bahwa kompresi data tidak akan berfungsi), dan tabel akan sering diperbarui (jadi Indeks Columnstore Clustered mungkin tidak akan benar-benar membantu).
Untuk detail lengkap, silakan lihat posting saya:
Dukungan UTF-8 Asli di SQL Server 2019: Juruselamat atau Nabi Palsu?