PHP ve MSSQL Bağlantısı Türkçe Karakter Problemleri

Transkript

PHP ve MSSQL Bağlantısı Türkçe Karakter Problemleri
PHP ve MSSQL Bağlantısı Türkçe Karakter Problemleri
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
dijitalders.net
PHP ve MSSQL Bağlantısı Türkçe
Karakter Problemleri
1
PHP ve MSSQL Bağlantısı Türkçe Karakter Problemleri
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.
dijitalders.net
PHP ve MSSQL Bağlantısı Türkçe
Karakter Problemleri
2
PHP ve MSSQL Bağlantısı Türkçe Karakter Problemleri
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.
dijitalders.net
PHP ve MSSQL Bağlantısı Türkçe
Karakter Problemleri
3
PHP ve MSSQL Bağlantısı Türkçe Karakter Problemleri
Türkçe karakterleri latin karakterlere çevirerek yazıyorsa, Veritabanından new query diyerek aşağıdaki komutları çalıştırmak yeterli
olacaktır.
USE master;
GO
ALTER DATABASE TestDb
COLLATE Turkish_CI_AS ;
GO
Collation ayarlarını kontrol etmek için
SELECT name, collation_name
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.
dijitalders.net
PHP ve MSSQL Bağlantısı Türkçe
Karakter Problemleri
4
PHP ve MSSQL Bağlantısı Türkçe Karakter Problemleri
INSERT INTO dbo.Kitaplar (yazar) VALUES(N’DEITEL’);
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.
Fatal error: Uncaught exception ‘PDOException’ with message ‘SQLSTATE[HY000]: General error: 4004 General SQL Server error:
Check messages from the SQL Server [4004] (severity 16) [(null)]’ in
Linux terminale :
sudo nano /etc/freetds/freetds.conf
Bu dosyada şu satırı bulup
[global]
# TDS protocol version
;
tds version = 4.2
hemen altına şu satırları ekliyoruz…
tds version = 8.0
client charset = UTF-8
kaydedip Linux sistemi yeniden başlatıyoruz.
Kaynaklar
https://webdeyim.wordpress.com/2013/10/24/sql-server-turkce-karakter-problemi/
http://www.cihanblog.com/pdo-ile-mssql-baglanti-sorunu.html
http://bilgisayamiyorum.com/question/167.aspx
dijitalders.net
PHP ve MSSQL Bağlantısı Türkçe
Karakter Problemleri
5

Benzer belgeler