SQL Server 2019'dan başlayarak (şu anda beta / "Community Tech Preview" da), yeni bir UTF-8 harmanlama dizisi aracılığıyla UTF-8 için yerel destek var. ANCAK, kullanım UTF-8 yeteneğine sahip gelmez değil yapmanız gerekir anlamına gelir. UTF-8 kullanmanın aşağıdaki gibi kesin dezavantajları vardır:
- Sadece ilk 128 kod noktası 1 bayttır (yani standart 7 bit ASCII seti)
- Sonraki yaklaşık 2000 kod noktası 2 bayttır, dolayısıyla UTF-16 /
NVARCHAR
- BMP'de kalan 63k kod noktasının (yani U + 0800 - U + FFFF aralığı) hepsi 3 bayttır, dolayısıyla UTF-16 / 'daki aynı karakterden 1 bayt daha büyüktür
NVARCHAR
.
- Sadece belirtin: Ek Karakterler her iki kodlamada 4 bayttır, bu nedenle orada boşluk farkı yoktur
- UTF-8 kullanarak yerden tasarruf edebilirsiniz, ancak bunu yapmak için performansa çarpma şansınız çok yüksektir.
Aslında şu şekilde ortaya çıkıyor: UTF-8, 8 bitlik sistemlerin (genellikle ASCII ve ASCII Genişletilmiş - Kod Sayfaları etrafında tasarlanan) Unicode'u hiçbir şeyi bozmadan veya mevcut herhangi bir değişiklik gerektirmeden kullanmasını sağlayan bir depolama biçimi tasarımıdır. dosyaları işler tutmak için. UTF-8 dosya sistemleri ve ağ için harika, ama depolanan veriler iç SQL Server ne olduğunu. Şöyleki verileri olduğu gerçeği çok (ya da tamamen) standart ASCII aralığında UTF-16 / depolanan aynı verilerin daha az alan gerektiren NVARCHAR
bir yan etkidir. Tabii, bu yararlı olabilir bir yan etkisi var ancak karar ihtiyacı verilerini hem anlayan birisi tarafından yapılacak ve bu kararın sonuçları / sakıncaları. Bugenel kullanım için bir özellik değil .
Ayrıca, UTF-8'in (SQL Server'da) ana kullanım durumu zaten UTF-8 kullanan uygulama kodu içindir, muhtemelen zaten onu destekleyen başka bir RDBMS ile ve uygulama kodunu / DB şemasını güncelleme isteği veya yeteneği yoktur kullanımı NVARCHAR
türünden (tablo, değişkenler, parametreler, vs için) veya bir büyük harf "N" ile önek dize hazır etmek. Amaç, mevcut UTF-8'in nedeniyle aynıdır: uygulama kodunun genel yapıyı değiştirmeden veya mevcut verileri geçersiz kılmaksızın Unicode'u kullanmasını sağlayın. Bu durumunuzu açıklıyorsa, UTF-8 kullanın, ancak bununla ilgili hala birkaç hata / sorun olduğunu unutmayın.
Unicode'a açık NVARCHAR
veya büyük "N" ön ekli dize değişmezleri kullanmadan çalışmak için açık bir gereksiniminiz yoksa, UTF-8'in bir avantaj olduğu diğer tek senaryo , izin vermesi gereken çoğunlukla standart ASCII verilerinin bir LOT'una sahip olmanızdır . Unicode karakterler kullandığınızda NVARCHAR(MAX)
(yani veri sıkıştırmanın çalışmadığı anlamına gelir) ve tablo sık sık güncellenir (bu nedenle Kümelenmiş Sütun Dizini büyük olasılıkla gerçekten yardımcı olmaz).
Tüm ayrıntılar için lütfen gönderime bakın:
SQL Server 2019'da Yerel UTF-8 Desteği: Kurtarıcı mı yoksa Sahte Peygamber?