Programlama dillerinin çalışma mantığı birbirinden farklıdır. PHP ile MySQL’i beraber kullanırken en çok yaşanan problemlerden biri karakter seti uyumsuzluğudur. Bu uyumsuzluk, özellikle Türkçe karakterler (ç, ğ, ü, ö, ş, İ) kullanıldığında garip semboller veya soru işareti şeklinde karşımıza çıkar.
Bu sorunun temel nedeni, PHP dosyanız bir karakter setinde (örneğin UTF-8), MySQL tablolarınız başka bir karakter setinde (örneğin latin1 veya latin5), HTML çıktınız farklı bir karakter setinde (örneğin ISO-8859-9) kodlandığında uyumsuzluk zinciri oluşur. Bir yerdeki Türkçe karakter doğru kaydedilse bile, diğer tarafta farklı bir şekilde okunur.
Dolayısıyla çözümün özü her şeyin aynı karakter setinde olması gerekir.
PHP ile MySQL bağlantısı yaparken aşağıdaki komutlar kullanılmalıdır:
mysql_query("SET NAMES utf8");
mysql_query("SET CHARACTER SET utf8");
mysql_query("SET COLLATION_CONNECTION='utf8_general_ci'");SET NAMES utf8: PHP tarafında gönderilen/verilen sorgular UTF-8 olarak ayarlanır.
SET CHARACTER SET utf8: Sunucuya giden ve gelen karakterler UTF-8 olur.
SET COLLATION_CONNECTION: MySQL bağlantısında kullanılacak sıralama ve karşılaştırma yöntemi belirlenir.
Not: Güncel projelerde mysql_query yerine mysqli veya PDO kullanmanız önerilir.
komutlarını ve tüm tablolarda utf8_general_ci karakterini kullanın. Bunu phpMyAdmin üzerinden yapabilmeniz mümkün. Sorun yaşamamanız için her şeyin karakter seti aynı olmalı. Yani UTF-8 olursa rahatlarsınız. Peki nedir her şeyden kasıt olan şey? Veritabanı, html dökümanları, php dosyaları ve dil kodlamaları. Ufak bir örnek vermek gerekirse, HTML döküman karakter seti şunun gibidir:
meta http-equiv="Content-Type" content="text/html; charset=UTF-8"PHP dil dosyalarında zaten en yukarıda anlattım. Panelden de UTF-8 olmalı. Aksi halde çoğu kimse sorun yaşamıyor. Yaşayanı da görmedim henüz. – Eğer olmuyorsa, şunu denemenizde fayda var.
BigDump işi kolaylaştırıyor.
Kısaca anlatmak gerekirse, ilk önce buradan uygulamayı indirin. Ardından içindeki bigdump.php dosyasını not defteri ile açın (veya farklı bir editör de olabilir). Database configuration kısmını kendinize göre düzenleyin. Şöyle, $filename = ”; yazılmış olan yere sql dosyanızın ismini yazın (çift tırnakların arasına), ardından $db_connection_charset = ”; yazılmış olan yere latin5 yazın (yine çift tırnak arasına) ve bunları kaydedin. Ardından FTP’ye girip yeni bir klasör oluşturun, bigdump.php ve sql dosyanızı aynı klasöre atın ve araç çubuğuna adresi yazarak (bigdump.php’nin yolunu) çalıştırın. Çalıştırdıktan sonra sql dosyası yüklenmiş olacak. Ancak ufak bir ayar daha var. phpMyAdmin’den Collaction düzenlemesi var. Collaction kısmının da latin5 kalması gerekiyor.
Bunu da phpMyAdmin’den Işlemler kısmından, tabloyu düzenle kısmına tıklayın, ardından karakteri latin5 yapın (değilse tabii), bu kadar. Bunların ardından pek sorun çıkartabileceğini sanmıyorum. Eğer olursa da MySQLDumper uygulamasını deneyin. Netice itibariyle işlem şu hale gelmeli:

Neden bazen UTF-8 yerine latin5 kullanılıyor?
Türkiye’de uzun süre kullanılan karakter setlerinden biri de latin5 (ISO-8859-9) oldu. Bazı eski veritabanlarında tüm tablolar latin5 olarak kaydedilmiş olabilir. Eğer mevcut verileriniz latin5 karakter setiyle oluşturulduysa ve bozulmadan kullanılmasını istiyorsanız, yeni tabloları da latin5 olarak ayarlamak zorundasınız.
Böyle durumlarda BigDump veya MySQLDumper gibi araçlarla dump (yedek) alıp, latin5 uyumlu bir şekilde tekrar import etmek gerekebilir.



Yorum bırakın