PHP ve MSSQL Bağlantısı Türkçe Karakter Problemleri
Eğer bir database tanımlaması (collation) düzgün yapılandırılmadıysa taşıdığınız ya da yeni oluşturduğunuz veritabanındaki (database) içeriklerde bulunan türkçe karakterler bozulabilir. Bunun nedeni veritabanını (database) oluştururken seçmemiş olduğunuz ve muhtemelen default kalan "collation" ayarıdır. Eğer default (kendiliğinden) değeriniz türkçe değilse tnaımlama bozuk olacaktır.
Yeni bir veritabanı oluştururken ya da veritabanı (database) taşırken yeni ekranında sol tarafta bulunan "Options" sekmesinde açılan "Collation" öğesini "TURKISH_CI_AS" olarak seçmelisiniz
Burada sağda üst kısımda görüldüğü üzere "Collation" <server default> olarak ayarlanmış. Bunu "TURKISH_CI_AS" olarak değiştirirseniz tanımlama anlamında herhangi bir karakter sorunu yaşamazsınız.
Bir veritabanının (database) tanımlama dilini kontrol etmek isterseniz. Sql Server Management Tools a bağlandığınızda sol taraftaki veritabanı (database) listesinden istediğiniz database e sağ tıklayın. "Properties" i seçin. Burada açılan "General" sekmesinde görüldüğü üzere sağ tarafta altta Maintenance başlığında "Collation" kısmı bulunmaktadır.
Türkçe karakterleri latin karakterlere çevirerek yazıyorsa, Veritabanından new query diyerek aşağıdaki komutları çalıştırmak yeterli olacaktır.
GO
ALTER DATABASE TestDb
COLLATE Turkish_CI_AS ;
GO
Collation ayarlarını kontrol etmek için
FROM sys.DATABASES
WHERE name = N'TestDb';
GO
MSSQL’de eğer databasimizin collation’u Turkish_CI_AS seçilmemişse insert yaparken türkçe karakter problemi yaşamamız mümkün. Eğer veritabanınız GoDaddy gibi yurtdışında bulunan bir hosting firmasında bulunuyorsa collation default olarak Latin1 seçilmiş olabiliyor. Bunu değiştirme yetkiniz yoksa, insert ve update yaparken stringlerimizi unicode olarak göndermemiz gerekli.
Stringleri unicode olarak göndermek için başına büyük N harfi koymamız gerekli. Bu şekilde gönderilen tüm karakter setleri unicode olarak kaydedilecektir. Bu sayede türkçe karakterlerimiz korunmuş olacaktır.
Unicode verilerin gönderilmesinde sıkıntı yaşanıyor. Arıca PHP sunucusundan MSSQL sql sunucusuna yapılan bağlantılardaki türkçe karakter sorunun çözümüde aşağıdaki gibidir.
Linux terminale :
Bu dosyada şu satırı bulup
# TDS protocol version
; tds version = 4.2
client charset = UTF-8
kaydedip Linux sistemi yeniden başlatıyoruz.
Kaynaklar