StoNeR_
02-16-2008, 16:31
Öncelikle MySQL 4.1.x sürümünde Türkçe karakter problemi baştan beri yoktur, problemin asıl kaynağı bizim veri tabanlarımızı yanlış karakter setinde oluşturmamız ve server ayarlarının da birebir yanlış yapılandırılmasından kaynaklanmaktadır.
MySQL 4.1.x serisi ile birlikte yeni bir özellik olarak gelen karakter setleri (charset) ve buna eşit karşılaştırma setleri (collation), özellikle daha önceki 4.0.x ve 3.0x serilerindeki sıralama ve arama sorgularındaki yaşanan problemi tamamen ortadan kaldırıyor.
MySQL 4.1.x serisinde Türkçe karakterler için 2 ayrı karşılaştırma seçeneği bulunmaktadır.
Bunlar;
* latin5_bin (büyük, küçük harf duyarlı)
* latin5_turkish_ci (büyük, küçük harf duyarsız)
karşılaştırmalarıdır, bizim tercihimiz her zaman latin5_turkish_ci karşılaştırması olmalıdır. Bu karşılaştırma sayfalarda ISO-8859-9 setine denk gelmektedir.
MySQL\'de latin5 karakter seti, varsayılan karşılaştırma olarak latin5_turkish_ci karşılaştırmasını kullanıyor, tabloları yada veri tabanlarını oluştururken bunu ekstradan girmenize gerek yok ancak girmenizin zarardan çok faydası olacaktır.
Tablolarınızı oluştururken herzaman aşağıdaki gibi oluşturun, mesela latin5 karakter seti ve karşılaştırma latin5_turkish_ci için en doğru tablo oluşturmasını yapalım:
CREATE TABLE tablo1 (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50)
)
Bu tabloda karşılaştırma seçeneği girilmediği için varsayılan karşılaştırma; latin5_turkish_ci kullanır.
Şimdide latin5_bin karşılaştırması için doğru bir tablo oluşturalım;
CREATE TABLE tablo1 (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50)
) CHARSET=latin5 COLLATE=latin5_bin;
Bu tabloda COLLATE girdiğimiz için karşılaştırma değeri olarak latin5_bin değerini kullanacaktır.
En önemli kısım veri tabanı oluşturmada bitiyor. Eğer yukarıdaki sabit ayarlarla bundan sonraki oluşturulacak bütün tabloları latin5 ve karşılaştırması latin5_turkish_ci tanımlamasını otomatik olarak kullanmasını sağlamak için, veri tabanını aşağıdaki gibi oluşturuyoruz (latin5_turkish_ci için örnek);
CREATE DATABASE veritabanıadı CHARSET=latin5;
Bu komutla veri tabanımızı oluşturduğumuzda, karşılaştırma değeri otomatik olarak latin5_turkish_ci kullanılacaktır.
Eğer tablolarda latin5_bin karşılaştırmasını kullanmak istiyorsak, onu ayrıca veri tabanını oluştururken tanımlıyoruz;
CREATE DATABASE veritabanıadı CHARSET=latin5 COLLATE=latin5_bin;
Ancak sistem ayarları latin1 olarak ayarlı olan bir makinede, bu ayarları yapsanız bile bu sefer türkçe karakterlerin yerine sayfanızda ? gibi soru işaretleri çıkacaktır.
Bunun da çözümü çok basit. MySQL bağlantısı yaptığınız sorgu koduna aşağıdaki eklentiyi yapmanız yeterli;
mysql_query("SET NAMES \'latin5\'");
Böylece bağlantı yapılacak istemcinin karakter seti latin5 olarak tanımlanır ve karakterler doğru görüntülenir.
Saygılarımızla...
MySQL 4.1.x serisi ile birlikte yeni bir özellik olarak gelen karakter setleri (charset) ve buna eşit karşılaştırma setleri (collation), özellikle daha önceki 4.0.x ve 3.0x serilerindeki sıralama ve arama sorgularındaki yaşanan problemi tamamen ortadan kaldırıyor.
MySQL 4.1.x serisinde Türkçe karakterler için 2 ayrı karşılaştırma seçeneği bulunmaktadır.
Bunlar;
* latin5_bin (büyük, küçük harf duyarlı)
* latin5_turkish_ci (büyük, küçük harf duyarsız)
karşılaştırmalarıdır, bizim tercihimiz her zaman latin5_turkish_ci karşılaştırması olmalıdır. Bu karşılaştırma sayfalarda ISO-8859-9 setine denk gelmektedir.
MySQL\'de latin5 karakter seti, varsayılan karşılaştırma olarak latin5_turkish_ci karşılaştırmasını kullanıyor, tabloları yada veri tabanlarını oluştururken bunu ekstradan girmenize gerek yok ancak girmenizin zarardan çok faydası olacaktır.
Tablolarınızı oluştururken herzaman aşağıdaki gibi oluşturun, mesela latin5 karakter seti ve karşılaştırma latin5_turkish_ci için en doğru tablo oluşturmasını yapalım:
CREATE TABLE tablo1 (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50)
)
Bu tabloda karşılaştırma seçeneği girilmediği için varsayılan karşılaştırma; latin5_turkish_ci kullanır.
Şimdide latin5_bin karşılaştırması için doğru bir tablo oluşturalım;
CREATE TABLE tablo1 (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50)
) CHARSET=latin5 COLLATE=latin5_bin;
Bu tabloda COLLATE girdiğimiz için karşılaştırma değeri olarak latin5_bin değerini kullanacaktır.
En önemli kısım veri tabanı oluşturmada bitiyor. Eğer yukarıdaki sabit ayarlarla bundan sonraki oluşturulacak bütün tabloları latin5 ve karşılaştırması latin5_turkish_ci tanımlamasını otomatik olarak kullanmasını sağlamak için, veri tabanını aşağıdaki gibi oluşturuyoruz (latin5_turkish_ci için örnek);
CREATE DATABASE veritabanıadı CHARSET=latin5;
Bu komutla veri tabanımızı oluşturduğumuzda, karşılaştırma değeri otomatik olarak latin5_turkish_ci kullanılacaktır.
Eğer tablolarda latin5_bin karşılaştırmasını kullanmak istiyorsak, onu ayrıca veri tabanını oluştururken tanımlıyoruz;
CREATE DATABASE veritabanıadı CHARSET=latin5 COLLATE=latin5_bin;
Ancak sistem ayarları latin1 olarak ayarlı olan bir makinede, bu ayarları yapsanız bile bu sefer türkçe karakterlerin yerine sayfanızda ? gibi soru işaretleri çıkacaktır.
Bunun da çözümü çok basit. MySQL bağlantısı yaptığınız sorgu koduna aşağıdaki eklentiyi yapmanız yeterli;
mysql_query("SET NAMES \'latin5\'");
Böylece bağlantı yapılacak istemcinin karakter seti latin5 olarak tanımlanır ve karakterler doğru görüntülenir.
Saygılarımızla...