MSSQL veritabanı yönetiminde, özellikle Plesk veya benzeri web hosting panelleri üzerinden oluşturulan veritabanlarında sık karşılaşılan can sıkıcı bir senaryo vardır: Yeni bir tablo oluşturursunuz, metin kolonuna veri yazarsınız ve Türkçe karakterler (ş, ğ, ı, ö, ü, ç) bozuk görünür ya da kaybolur.
Bu problemi aşmak için çoğu zaman her tablonun metin içeren her bir kolonu için tek tek şu tür sorguları çalıştırmak zorunda kalırız:
SQL
ALTER TABLE tblBasvurular
ALTER COLUMN Gonderen VARCHAR(50) COLLATE Turkish_CI_AS;
Bu yöntem anlık olarak ilgili kolonu kurtarsa da, her yeni tablo veya kolon eklendiğinde aynı işlemi tekrarlamak ciddi bir iş yükü ve zaman kaybıdır. Peki, bu sorunun kaynağı nedir ve tek seferde kalıcı olarak nasıl çözülür?
Sorunun Kaynağı Nedir?
Windows sunucularda veya Plesk Panel üzerinde yeni bir veritabanı açıldığında, sunucu varsayılanı genellikle SQL_Latin1_General_CP1_CI_AS harf düzeniyle (Collation) gelir.
Veritabanı düzeyinde Türkçe karakter seti (Turkish_CI_AS) tanımlı olmadığında ve kolon tipi olarak ANSI tabanlı VARCHAR kullanıldığında, SQL Server Türkçe karakterleri tanıyamaz. Dolayısıyla kolon düzeyinde zorlama COLLATE yazılmadığı sürece karakter bozulmaları yaşanır.
Kalıcı Çözüm: Veritabanı Düzeyinde Collation Güncellemesi
Her kolon için tek tek uğraşmak yerine, veritabanının varsayılan harf düzenini tek bir script ile Turkish_CI_AS yapabilirsiniz. Böylece o andan itibaren açacağınız tüm yeni tablolar ve kolonlar varsayılan olarak Türkçe uyumlu gelir.
Bunun için SQL Server Management Studio (SSMS) veya Plesk veritabanı sorgu alanında şu adımları çalıştırmanız yeterlidir:
SQL
-- 1. Veritabanındaki aktif bağlantıları kesip tek kullanıcı moduna alıyoruz
ALTER DATABASE [VeritabaniAdiniz] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
-- 2. Harf düzenini Türkçe olarak güncelliyoruz
ALTER DATABASE [VeritabaniAdiniz] COLLATE Turkish_CI_AS;
GO
-- 3. Veritabanını tekrar çoklu kullanıcı moduna döndürüyoruz
ALTER DATABASE [VeritabaniAdiniz] SET MULTI_USER;
GO
Önemli Not:
SET SINGLE_USER WITH ROLLBACK IMMEDIATEkomutu, veritabanına bağlı olan mevcut bağlantıları sonlandırarak açık işlemleri geri alır (rollback) ve çakışma yaşamadan collation değişikliğinin uygulanmasını sağlar.
İşlemin Başarısını Doğrulama
Güncellemenin başarıyla uygulanıp uygulanmadığını kontrol etmek için şu sorguyu çalıştırabilirsiniz:
SQL
SELECT name, collation_name
FROM sys.databases
WHERE name = 'VeritabaniAdiniz';
Dönen tabloda collation_name sütununda Turkish_CI_AS görüyorsanız, işlem başarıyla tamamlanmıştır. Artık oluşturacağınız hiçbir tabloda manuel olarak COLLATE tanımlamanıza gerek kalmaz.
Alternatif ve En Güvenli Yaklaşım: NVARCHAR Kullanımı
Veritabanı harf düzenini değiştiremediğiniz ya da çok dilli bir yapı kurguladığınız projelerde ise en sağlıklı yöntem VARCHAR yerine NVARCHAR kullanmaktır.
-
VARCHAR, tek baytlık ANSI karakterleri tutar ve veritabanı harf düzenine bağımlıdır. -
NVARCHAR, Unicode (UTF-16) standardında veri tutar. Bu sayede veritabanı harf düzeni İngilizce dahi olsa Türkçe karakterler, farklı alfabeler veya emojiler bozulmadan saklanır.
Yeni tablolarınızda metin alanlarını doğrudan NVARCHAR olarak tanımlayarak da karakter sorunlarının önüne tamamen geçebilirsiniz:
SQL
CREATE TABLE tblBasvurular (
Id INT IDENTITY(1,1) PRIMARY KEY,
Gonderen NVARCHAR(50)
);
Kurye ağımıza katılın : https://www.reskurye.com/KuryeOl
Youtube Kanalımıza Abone Olun : https://www.youtube.com/@reskurye
