# Veritabanı Collation Değişikliği: Neden Bu Kadar Riskli?

Collation, veritabanındaki karakter karşılaştırma ve sıralama kurallarını belirler. Yanlış ayarlanmış collation yıllarca sorun yaratır. Değiştirilmesi ise çok daha büyük sorun.

Collation Neden Önemli? Collation üç şeyi etkiler: büyük/küçük harf duyarlılığı, aksan duyarlılığı ve karakter sıralama düzeni. SQL\_Latin1\_General\_CP1\_CI\_AS ile Turkish\_CI\_AS arasındaki fark küçük görünür. Ama Türkçe karakterler içeren veritabanlarında yanlış collation şu sonuçlara yol açar:

"istanbul" ile "İstanbul" eşit sayılmayabilir ORDER BY sıralaması beklenmedik sonuç verir JOIN işlemleri karakter farklılığı nedeniyle başarısız olabilir Full-text search yanlış sonuçlar döndürür

Collation Mevcut Durumu İnceleme sql-- Sunucu collation SELECT SERVERPROPERTY('Collation') AS SunucuCollation;

\-- Veritabanı collation SELECT name AS VeritabaniAdi, collation\_name AS Collation FROM sys.databases ORDER BY name;

\-- Kolon bazında farklı collation kullananlar SELECT t.name AS TabloAdi, c.name AS KolonAdi, c.collation\_name AS KolonCollation, DATABASEPROPERTYEX(DB\_NAME(), 'Collation') AS VeritabaniCollation FROM sys.tables t JOIN sys.columns c ON t.object\_id = c.object\_id WHERE c.collation\_name IS NOT NULL AND c.collation\_name != CAST(DATABASEPROPERTYEX(DB\_NAME(), 'Collation') AS NVARCHAR(128)) ORDER BY t.name, c.name; Son sorgu veritabanı varsayılanından farklı collation kullanan kolonları listeler. Bu kolonlar potansiyel uyumsuzluk noktaları.

Collation Değiştirmenin Zorlukları Veritabanı collation değiştirme Veritabanı collation'ını değiştirmek mevcut verileri otomatik dönüştürmez. Sadece yeni oluşturulacak nesnelerin varsayılan collation'ını belirler. Mevcut char, varchar, nvarchar kolonlarının collation'ını değiştirmek için her kolonu ayrı ayrı ALTER TABLE ile güncellemek gerekir. sql-- Tek kolon için collation değiştirme örneği ALTER TABLE dbo.Musteriler ALTER COLUMN Sehir NVARCHAR(100) COLLATE Turkish\_CI\_AS NOT NULL; Ama bu işlem büyük tablolarda çok uzun sürer ve kilit sorunlarına yol açar. Sistem nesneleriyle uyumsuzluk Geçici tablolar (#temp) sunucu collation'ını kullanır. Veritabanı collation'ı farklıysa geçici tablolarla JOIN yapmak collation uyumsuzluk hatası verebilir.

Collation Değişikliği Neden Değişiklik Yönetiminin En Riskli Konularından Biri? Geri alınması son derece zor: Collation değiştirildikten sonra geri almak neredeyse yeni bir migration yapmak kadar karmaşık. Etki alanı çok geniş: Tüm string kolonlar, tüm sorgular, tüm JOIN işlemleri etkilenebilir. Test edilmesi zor: Test ortamında sorun çıkmayabilir, asıl sorunlar production verisinin çeşitliliğiyle ortaya çıkar.

Collation Değişikliği İçin Minimum Gereksinimler Bu değişiklik yüksek risk kategorisinde değerlendirilmeli ve şunlar zorunlu olmalı: Tüm etkilenen kolonların listesi. Her kolon için dönüşüm ve geri alma script'i. Test ortamında production verisiyle test sonuçları. Uygulama katmanı testi. Onay için teknik ekip ve uygulama geliştiricilerinin birlikte imzası.

Sonuç Collation değişikliği veritabanı değişikliklerinin en karmaşık ve en riskli kategorilerinden biri. "Küçük bir ayar değişikliği" gibi görünse de etkisi tüm sisteme yayılabilir. Bu değişiklik asla hafife alınmamalı. Detaylı bilgi için: sqlchangeguard.com
