Mysql Database Türkçe Karekter Sorunu olarak etiketli yazılar
Bigdump Yöntemiyle Veritabanı Yüklemek
9 Oca
Bigdump betiği büyük çaplı veritabanı yedeklerinizi yeniden veritabanına
yüklemenize yardım eder. Normal bir yükleme işleminde (büyük bir dosyadan
bahsediyoruz) veritabanında yüzlerce sorguyu çalıştırmak zaman alacağı için
“time limit exceeded” şeklinde bir hata alırsınız ve işleminiz yarıda kalır.
Bahsettiğimiz tek bir php dosyasından oluşan betik sayesinde ise belirli bir
satır sayısı belirliyorsunuz ve her defasında kaldığı yerden devam ederek
belirttiğiniz kadar satırı veritabanında çalıştırıyor. Bu işlemi yaparken
sayfayı otomatik olarak tekrar tekrar yüklüyor. Tabi sayfanın sürekli tekrar
yüklenmesi bir süre sonra”permission denied” hatası almanıza sebep olur. Ama
buna da çözüm getirilmiş ve betiğe dahil edilen bir ayarla her işlemden sonra
sunucuyu dinlendirmek için ne kadar bekleyeceğini belirtme fırsatı verilmiş.
Betiği indirmek için Tılayınız Kullanma talimatı beni oku dosyasındadır
Bigdump Betiğinin Kullanımı
Bu betiği kullanmak gerçekten çok kolay. Öncelikle bigdump.php dosyasını
veritabanı yedeğinizle aynı dizine koyun. Veritabanı yedeğiniz bir zip dosyası
veya normal bir text dosyası(genelde .sql uzantılı) olabilir. Betik dosyanızı
dizine yükledikten sonra notepad gibi bir düzenleyici ile betiği açın ve şu
satırları bulun.
// Database configuration
$db_server = “localhost”; //Sunucu ki büyük ihtimalle böyle kalır
$db_name = “db_ismi”; //Veritabanı ismi
$db_username = “db_kullanici”; //Veritabanı kullanıcı adı
$db_password = “sifre”; //Veritabanı şifresi
// Other Settings
$filename = “dosya.sql”; //Yedek dosyasının ismi
$linespersession = 500; // Her seferde sorgulanacak satır sayısı
$delaypersession = 0; // Her tekrardan önce milisaniye cinsinden bekleme süresi
(2000=2saniye)
Tüm bu ilemlerden sonra betiği çalıştırın
Örn:
http://www.siteismi.com/bigdump.php ve işleme başlayın bu
şekilde büyük boyutlu veritabanlarınız kolaylıkla yükleyebilirsiniz
Mysql Database Türkçe Karekter Sorunu
20 Eki
->
Biz phpciler için vazgeçilmez biricik veritabanımız Mysql,
hüzünlü bir sonbahar akşama MySQL 4.1.x versiyonunu tüm dünyaya duyurdu.
Burada garip olan bişey yoktu taki “Collation” denen kavramını görene kadar.
İlk gördügümde pek bir gereksiz gelmişti bu “Collation” kavramı bana.Hatta collation = sorunlar zincirinin ilk halkası olacağını daha ilk görüşte hissetmeye başlamıştım…Bu yeni gelen “Collation” olayı Türkçe karakterlerde sorun yaratıyor ve beni çileden çıkartıyordu. O zaman geçici bir çözüm olarak localhost da eski MySQL sürümü kullanarak acılarıma son vermiştim. (O anı kurtarma içgüdüsüydü bu sanırım) Fakat çalıştığım hostlarım çoktan yeni mysql e geçmişti. Artık çağa ayak uydurmanın zamanı gelmişti.
Bu “Collation” kavramı nedir, niye, çıktı nereden geldi başımıza, dertsiz başımıza dert mi katmak istiyor mysql programcıları diye düşünürken “Collation” kavramının mantığını ögrenince, bizim mysql programcı abilerimizin alınlarından öpmek geldi içimden.
MySQL’e “Collation” yapısını ekleyerek daha modern, gelişmiş ve onbinlerce dolarlık maliyeti olan veritabanlarındaki (Oracle gibi) bir standarda kavuşturmuşlardı biz gariban phpcileri; “Collation” olayının gelmesi ile sadece ilgili karakter setini yükleyerek gereksiz karakterlerden kaynaklanan (önceleri bütün dillere özgü karakter setlerini yükleyerek evrensel bir destek sağlıyordu mysql, çince gibi bir dil yapısı destegini bile yüklüyorduk bilgisayarımıza yada hostaki makinamıza ama ne gerek vardı ki, diye düşünüp geliştirmişler yeni “Collation” olayını) ağırlıktan kurtararak sorgu cevap sürelerinde kayda değer derecede azalmalar sağladığını öğrendim.Daha az cpu kullanarak daha hızlı sürede sorgu cevap mekanizmasına “Collation” yapısına geçiş ile kavuşmuş olduk.
Aslında ortada mysql türkçe karekter sorunu diye bir olay yoktur.Sorun bizim veri tabanlarımızı yanlış karakter setinde oluşturmamız ve server ayarlarınında birebir yanlış configürasyonundan kaynaklanmaktaymış.Ben bilgisayarımda appserv kullanırım.Herşeye öncelikle kendi bilgisayarımdaki karekter setinin dogru tanımlanması gerektiğini düşüneren başladım ve c:\windows\ klasöründeki my.ini dosyasını editlemek için kolları sıvadım bu dosyayı açtım:
my.ini dosyasında ki default-character-set=latin1 şeklindeki satırları default-character-set=latin5 yaptım.içimde bir iş yapmanın saadeti ile arkama yaslanıp olayın kefini çıkartmayı düşünürken birden karekterlerin tekrar gümlediğini görünce hevesim yine kursağımda kaldı. Biraz daha kurcalayınca kullandığınız veritabanının dolayısıyla tabloların da ilgili Collation ayarlarının latin5_turkish_ci olması gerektiğini gördüm. Fakat ne yazık ki benim tablolarımdaki field’ların collationları latin1_swedish_ci idi.Mysql Standart olarak swedish geçip işlem yapıyor eger siz özel olarak seçmezseniz. Eger bunu degiştirmezsek bu sütunlara yollayacağınız kayıtlar ise, isveçce dili göz önünde bulundurularak girilir. Bundan çıkan sonuç şu: isveçcede Türkçe karakter yer almaz, bu yüzden Türkçe karakterler yerine ? v.b. karakter çıkıyor. Tablolarımızı oluştururken Türkçe dil grubuna ait yapı olan latin5_turkish_ci şeklinde ayarlamamız gerekiyor. latin5_turkish_ci tablo yapısı ile biz “ISO 8859-9 Latin-1 modification for Turkish (Latin-5) ” haline uygun yapıyı seçmiş oluyoruz.
Yeni tablo oluştururken mutlaka charset degerini latin5 olarak yaparak oluşturursak artık karekter sorunu yaşamayız.
CREATE TABLE tablo1 (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
deneme VARCHAR(150)
) CHARSET=latin5;
Eski veritabanları ne yapacak:
Sistem ayarları latin1 olarak ayarlı olan bir makinedesiniz, bu ayarları yapsanız bile bu sefer türkçe karakterlerin yerine sayfanızda soru işaretleri çıkacaktır ‘?’ gibi.Yukarıda anlattığım nedenden dolayı bu makina latin1_swedish_ci ayarlıdır. isveç dilinde türkçe karekterler olmadığından siz verileri girerken, mysql onları anscii yapıda yerleştirmiştir veritabanına.Örnegin siz “öküz” kelimesini veritabanınıza girmişseniz onun hücredeki degeri “ö ;kü ;z” şeklindedir.
“Collation” olayının faydasını öküz örneginde daha iyi görüyorsunuz sanırım arkadaşlar.Veritabanından direk Türkçe yazılmış “öküz” kelimesini aramak başka “ö ;kü ;z” kelimesi şeklinde aramak başka performans verir.
Bu sorunu çözmek için ise scriptinizde kullandığınız config.php yada baglantıyı yaptığınız kod satırının altına yani
mysql_select_db(“$dbname”)fonksiyonun altına aşağıdaki kodları eklerseniz sorununuz düzelir.
mysql_query("SET NAMES 'latin5'");
mysql_query("SET CHARACTER SET latin5");
mysql_query("SET COLLATION_CONNECTION = 'latin5_turkish_ci'");



Yorumlar