Anasayfa | Hakkımda | Kitaplarım | RSS Site içinde
Kategoriler
» SQL Server 2012
» SQL Server 2008
» C#
» MySQL
» Hayata Dair
» Güncel Haber-Duyuru
» Bir Soru Bir Cevap
» Oracle ve Diğer VTYS
» Java

SQL Server’da verileri Türkçe Karaktere Dönüştürmek

26.08.2008 23:54:17
Default ayarı latin karakter olarak tanımlanmış bir SQL Server veritabanını, yıllarca kullanıp, günün birinde Türkçe'ye yedek indirdiğinizde çıkacak karakter sorunları saç baş yoldurabilir. Bu durumdan kurtulmanın daha kolay bir yolu olabilir ama SQL Server ‘da tanımlayacağınız bir skaler fonksiyon, biraz sizi uğraştırsa da işe yarar bir yöntem olarak tercih edilebilir.

SQL Server’i Türkçeleştirmek Hakkında

Şayet sıfırdan bir veritabanı tasarlıyorsanız daha sonra başağrıları çekmemek için, SQL Server’i Türkçeleştirmek konusunda belli başlı ayarları ele alan 'http://www.verivizyon.com/detail.asp?cid=324 adresindeki makaleye gözatabilirsiniz.

SQL Server Üstünde Skaler Fonksiyonlar Yazmak

En basit SQL Server Skaler fonksiyonu şu şekilde bir şey olacaktır:

CREATE FUNCTION fonksiyon(@isim VARCHAR(20))
RETURNS VARCHAR(30)
AS
BEGIN
	return 'Merhaba ' + isim
END

SQL Server’da Unicode Karakter Kullanmak

SQL Server herhangi bir string literali(elle verilen değeri) ASCII olarak algılar. Unicode olarak algılaması için ifadenin başına N’ unicode string’şeklinde belirtmek gerekir.

Bozuk Karakterlerin Türkçe Karşılıklarını Bulmak

Bütün bunlardan sonra bu işi yapan bir fonksiyon şu şekilde olabilir:

CREATE FUNCTION Turkceye (   
@girdi NVARCHAR(MAX)  
)  
RETURNS NVARCHAR(MAX)  
AS  
BEGIN  
 
DECLARE @sonuc NVARCHAR(MAX)  
SET @sonuc = @girdi  
 SET @sonuc = Replace(@sonuc COLLATE Latin1_General_BIN,N'ð', N'ğ');  
 SET @sonuc = Replace(@sonuc COLLATE Latin1_General_BIN,N'ð', N'Ğ'); 
 SET @sonuc = Replace(@sonuc COLLATE Latin1_General_BIN, N'Ð', N'Ğ');  
 SET @sonuc = Replace(@sonuc COLLATE Latin1_General_BIN,N'ý', N'ı');  
 SET @sonuc = Replace(@sonuc COLLATE Latin1_General_BIN,N'Ý', N'İ');  
 SET @sonuc = Replace(@sonuc COLLATE Latin1_General_BIN,N'þ', N'ş');  
 SET @sonuc = Replace(@sonuc COLLATE Latin1_General_BIN,N'Þ', N'Ş'); 
RETURN  @sonuc   COLLATE Turkish_CI_AS ;

END  

COLLATE fonksiyonunun kullanımı hakkında ayrıntılı bilgi MSDN’den edinebilirsiniz.

Bu türden bir fonksiyonun veritabanınızda işe yarayıp yaramadığını şu şekilde test edebilirsiniz:

SELECT dbo.Turkceye(tblMakale.makaleBaslik)
FROM tblMakale

Şayet fonksiyon tam olarak işe yarıyorsa, veritabanınızdaki her bir bozuk sütun için şu şekilde güncelleme yapabilirsiniz:

UPDATE tblMakale
SET tblMakale.makaleBaslik=dbo.Turkceye(tblMakale.makaleBaslik)
DİKKAT:

Veritabanlarında güncelleme yaparken dikkatli olmanız gerekir. Kalıcı veri kayıplarına neden olabilir.

Sonuç

Bu türden bir fonksiyonla verilerinizi UPDATE etmek suretiyle karakter sorunlarından kurtulabilirsiniz. Bu türden bir fonksiyon SQL Server 2000(bazı değişikliklerle), 2005 ve 2008 sürümlerinde çalıştırılabilir. 7.0 ve eski sürümler, fonksiyon için bir destek sağlamamaktadır.

Bir veritabanındaki belli veri türünden bütün sütunlarda fonksiyonu otomatik çalıştırmak için sysobject sistem view’i üstünde bir Cursor çalıştırabilirsiniz. Bu, ileri seviyede veritabanı programlama bilgisi gerektirir.

Yorumlar

mehmet yorumladı(25.05.2009 13:22:17)
Lisans yakalamak için yapılmış olabilirmi
Microsoft un lisansız programları yakalamak amacı ile çıkarmış olabilirmi bu programı.. Kontrol ettinizmi acaba..



Konuya müdahil olmak ister misiniz?
Başlık:  
İsim  :  
URL   :
Yorum