Çünkü MS SQL Server, UTF-8'i diğer RDBMS'lere kıyasla daha az desteklemektedir.
MS SQL Server, Windows içinde kullanılan "dar" dizgilerin ( char
C ++ CHAR
veya VARCHAR
SQL'de) eski "kod sayfasında" kodlandığı sözleşmesini izler . Kod sayfalarıyla ilgili sorun, sınırlı sayıda karaktere sahip olmalarıdır (çoğu, tek tek baytlı kodlamalardır, raporları 256 karakterle sınırlar) ve tek bir dilin (veya benzer alfabelere sahip dil grubunun) etrafında tasarlanmış olmalarıdır. Bu, çok dilli verileri saklamayı zorlaştırır. Örneğin, hem Rusça hem de İbranice verilerini depolayamazsınız, çünkü Rusça kod sayfası 1251'i ve İbranice kod sayfası 1255'i kullanır .
Unicode , bu sorunu dünyadaki her dili temsil edecek kadar, bir milyondan fazla karaktere sahip tek bir dev kodlanmış karakter kullanarak çözer. Birkaç Unicode kodlama şeması vardır; Microsoft , tarihsel nedenlerden dolayı UTF-16'yı kullanmayı tercih ediyor . UTF-16, dizeleri geleneksel 8 bit yerine 16 bit kod birimleri dizisi olarak temsil ettiğinden, ayrı bir karakter türü gerekir. MSVC ++ 'da budur . Ve MS SQL'de, ya da . "Ulusal" anlamına gelir Unicode hakkında çünkü bana geriye tavır sergileyen arası -nationalization, ama bu ISO terminoloji bu.wchar_t
NCHAR
NVARCHAR
N
Diğer SQL uygulamaları UTF-8 metnini bir VARCHAR
sütunda saklamanıza izin verir . UTF-8, verilerinizin çoğunlukla Temel Latin aralığında (ASCII ile karakter başına aynı 1 byte olarak temsil edilir) olduğu durumlarda optimize edilmiş, değişken uzunluklu (karakter başına 1-4 bayt) kodlamadır. herhangi bir Unicode karakteri. Böylece, bwalk2895 tarafından belirtilen "iki kat daha fazla alan" probleminden kaçınırsınız.
Ne yazık ki, MS SQL Server UTF-8'i desteklemiyorVARCHAR
, bunun yerine bunun yerine UTF-16'yı kullanmanız (ve ASCII metni için boşa alan), Unicode olmayan bir kod sayfası kullanmanız (ve yabancı karakterleri temsil etme özelliğini kaybetmeniz), veya UTF-8'i bir BINARY
sütunda saklayın (ve düzgün çalışmayan SQL string işlevleri gibi sakıncaları ya da verileri GUI DB yöneticinizde onaltılı bir döküm olarak görüntülemek zorunda kalmayın).