SQL Server'da UTF-8 Collation'a Veri Kaybetmeden Geçiş
SQL Server 2019 ve sonrasında, varchar sütunları _UTF8 ile biten bir collation ile Unicode metin saklayabiliyor; bu da her metin sütununu nvarchar'a çevirme zorunluluğunu ortadan kaldırıyor. Ancak collation değişikliği tek bir veritabanı ayarıyla bitmiyor: karşılaştırma, sıralama, benzersiz index'ler ve depolama boyutları etkileniyor. Yazı, sütun envanterinden üretim geçişine kadar adım adım güvenli bir yol öneriyor.
Kilit noktalar
- UTF-8 collation desteği SQL Server 2019 ve sonrasında geliyor.
- VARCHAR(n) bayt cinsinden ölçülür; çok baytlı karakterlerde sütun boyutunu yeniden hesaplamak gerekir.
- Veritabanı varsayılan collation'ını değiştirmek mevcut sütunları otomatik dönüştürmez.
- Karşılaştırma kuralları değişince benzersiz index'ler önceden kabul ettiği değerleri reddedebilir.
- Geçiş öncesi sys.columns üzerinden metin sütunlarının envanterini çıkarın.
- Üretimde önce yedek alın; log büyümesini, kilitlenmeyi ve uygulama davranışını test edin.
UTF-8 collation, char ve varchar sütunlarının kodlamasını UTF-8'e çevirir; böylece Latin alfabesi dışındaki metinler de tek bayt kod sayfasına sıkışmadan saklanabiliyor. Kritik nokta şu: VARCHAR(200) artık 200 bayt sınırı demek, 200 karakter değil. Çok baytlı karakterler içeren bir değer eskiden sığdığı sütuna sığmayabilir, bu yüzden geçiş öncesi DATALENGTH ve LEN ile gerçek boyutları ölçmek gerekiyor.
Yazar ayrıca yalnızca veritabanı varsayılan collation'ını değiştirmenin yeterli olmadığını vurguluyor: mevcut sütunlar kendi collation'larını koruyor. sys.columns üzerinden yapılan bir envanter, ardından test ortamında sütun bazlı ALTER COLUMN denemesi öneriliyor. Büyük tablolarda transaction log ve kilitlenme maliyeti ciddi; yeni sütun açıp veriyi taşıyarak aşamalı geçiş yapmak daha güvenli.
Gerçek dünyada kullanımı
- Müşteri adı ve adres alanlarında Latin alfabesi dışı karakter barındıran çok uluslu bir SaaS uygulamasının veritabanı.
- Dış sistemlerden gelen ürün açıklamalarını varchar sütunlarda depolayan ve depolama maliyetini düşürmek isteyen bir e-ticaret ekibi.
- Devir sırasında aşamalı şema geçişi planlayan, üretim kesintisini en aza indirmek isteyen bir DBA ve .NET ekibi.
Neden önemli
UTF-8'e geçiş, depolamayı ve çok dilli desteği iyileştirebilir; ama index ve karşılaştırma davranışı test edilmezse üretimde sessiz veri hatalarına yol açar.