SQL Server 2005/2008 UTF-8 Harmanlama / Karakter Seti


16

Başka bir SQL motorlarında ayarlamak mümkün olduğu gibi, SQL Server 2005/2008 içinde UTF-8serbest ayarlamak için seçenekleri doğrudan bulamıyorum Collations/Charsets, ancak SQL Server 2005/2008 sadece Latin ve SQL harmanlama vardır.

Win2008 işletim sisteminde bu harmanlamaları / karakter kümelerini SQL Server motorunda (her iki sürüm için) 2005/2008'i zorlamak / yüklemek için bazı seçenekler var mı?

Yanıtlar:


13

Hayır, yok. SQL Server UTF-8'i desteklemez.

Unicode veri istiyorsanız sütunlarınızı nvarchar / nchar olarak tanımlamanız gerekir. Not, dahili SQL Server bunu UCS-2 olarak saklar.

Bunun MS on Connect'ten talep edildiğini ve daha eski bir KB makalesinin bulunduğunu unutmayın . Ve bu blogdaki bazı bilgiler


6
Ayrıca, bir nvarchar üzerinde yabancı karakterlerle eşleşen herhangi bir metin yapacaksanız, dizeden önce N ile biçimlendirilmiş bir dizeyle eşleşmeniz gerekir (örneğin, N'οἰκονόμον ').
swasheck

Bu davranış, SQL sunucusunun son sürümlerinde değişti mi?
Seiyria

@Seiyria: hayır, aynı davranış
gbn

Bu yanıta giden yolu bulan herkes, lütfen MS Connect sayfasına gidin ve MS'in SQL Server'da UTF-8'i desteklediğini değerlendirin. Teşekkürler: D
DarcyThomas

@DarcyThomas Bu, SQL Server 2019'da bir gerçeklik haline geliyor, ancak açık bir ihtiyacı olmadığı sürece hala kullanması gereken bir şey değil. Benim bakınız cevap detayları için.
Solomon Rutzky

2

UTF-8'i karakter kümesi olarak yükleyemezsiniz, çünkü bir karakter kümesi değil, bir kodlamadır.

Unicode metni saklamak istiyorsanız nvarcharveri türünü kullanırsınız.

UTF-8 kullanılarak kodlanmış metni saklamak istiyorsanız, ikili veri ( varbinary) olarak saklarsınız .


1

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:

  1. Sadece ilk 128 kod noktası 1 bayttır (yani standart 7 bit ASCII seti)
  2. Sonraki yaklaşık 2000 kod noktası 2 bayttır, dolayısıyla UTF-16 / NVARCHAR
  3. 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.
  4. Sadece belirtin: Ek Karakterler her iki kodlamada 4 bayttır, bu nedenle orada boşluk farkı yoktur
  5. 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 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 NVARCHARbir 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ı NVARCHARtü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 NVARCHARveya 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?


0

Benim durumumda, Arapça karakterleri göstermek zorunda kaldım ve geliştirme veritabanım 2014'te, burada işler iyi çalıştı. Burada, sorguda Arapça karakterleri görebiliyordum ve harmanlamam SQL_Latin1_General_CP1256_CI_AS

Ama üretimim SQL Server 2008'deydi ve sonunda UTF-8 karakter setini desteklemedi. Burada, hepsini görebiliyordum ??????????? UTF-8, SQL 2008'de desteklenmediğinden.

Tüm yaptığım tüm varchar'ı nvarchar olarak değiştirdi ve Arapça char'ı düzgün görebiliyordum. Ayrıca 2008 veritabanı harmanlamamı SQL_Latin1_General_CP1256_CI_AS olarak değiştiriyorum

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.