TRForumcu.NeTWebmaster / Web Dizayn Scriptler / Programlama DilleriPHP / ASP WeB SiSTeMLeRi JooMLa (Moderatör: Gondolin){ MySQL 4.1.x Türkçe Karakter Sorunu Çözümü
Konu Bilgileri
Konu Başlığı { MySQL 4.1.x Türkçe Karakter Sorunu Çözümü
Cevaplar 0
Sonraki Sonraki Konu
Görüntüleyenler0 Üye ve 1 Ziyaretçi konuyu incelemekte.
Görüntülenme 244
Önceki Önceki Konu
Sayfa: [1]   Aşağı git
Yazdır
Konu Derecelendirme: 0 Bookmark and Share
Konu: { MySQL 4.1.x Türkçe Karakter Sorunu Çözümü  (Okunma Sayısı 244 defa) EkleBunu Sosyal Paylaşım Butonu
|| Kontecau ||
Saygıdeğer Üye
********


Mesaj : 3.214
Forum Para : 3328.00 YTL
« : 02 Aralık 2007, 16:40:31 »


Öncelikle MySQL 4.1.x sürümünde Türkçe karakter problemi baştan beriyoktur, problemin asıl kaynağı bizim veri tabanlarımızı yanlış karaktersetinde 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 karaktersetleri (charset) ve buna eşit karşılaştırma setleri (collation),özellikle daha önceki 4.0.x ve 3.0x serilerindeki sıralama ve aramasorguları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 olaraklatin5_turkish_ci karşılaştırmasını kullanıyor, tabloları yada veritabanlarını oluştururken bunu ekstradan girmenize gerek yok ancakgirmenizin zarardan çok faydası olacaktır.

Tablolarınızı oluştururken herzaman aşağıdaki gibi oluşturun, meselalatin5 karakter seti ve karşılaştırma latin5_turkish_ci için en doğrutablo 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 sabitayarlarla bundan sonraki oluşturulacak bütün tabloları latin5 vekarşılaştırması latin5_turkish_ci tanımlamasını otomatik olarakkullanması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, buayarları 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.

Logged
 
Sayfa: [1]   Yukarı git
Yazdır