Etiket arşivi: MySQL

MySQL Türkçe Karakter İlk Harf Sıralaması

Published / by Uğur Özşahin / Leave a Comment

    PHP ve MySQL e geçiş sürecim ve bu konulardaki eksikliklerim gün geçtikçe kapanıyor. Ancak sancılı bir dönem olduğu en azından benim için gün gibi ortada. Her yazdığım koddan sonra yada yazmak istediklerim için araştırmaya girişmek beni yavaşlatan başlıca sebeplerden. Fakat ilk kompleks projemi bu şekilde hazırlıyor olmamın çok önemli bir nedeni var. Yıllarca WEB konusunda VB Script ve Access veritabanı ile uğraşmış biri olarak, PHP ve nimetlerinden yararlanmanın tek yolunun bu şekilde kodlama yapmaktan geçiyor olması. Çünkü daha önce PHP ile ilgili her ne kadar bir kitap bitirmiş olsamda, düzey bakımından kesinlikle ihtiyacımı karşılayabilecek seviyede değildi. Dedim ya basit PHP kodlamalarımı belki bu kitap sayesinde yaptım, ancak işin içine daha özgün ve karmaşık yapılar girdiğinde, muhtemelen hiç bir kitap ihtiyaçları karşılayacak yeterliliğe sahip olmuyor.

    Başlıkta anlatmak istediğimi kısaca daha anlaşılabilir biçimde açıklayayım. PHP ve MYSQL ile yapmak istediğim şu, öncelikle elimde bir tablom ve listelemem gereken verilerim var. Listeleme koşulum ise her verinin baş harfinin, alfabetik bir düzen içerisinde web sayfasında görüntülenmesi. Örnek vermek gerekirse, ziyaretçi ’A’ harfine göre listeleme yapmak istediğinde, sonuçlar içerisinde yalnızca ’A’ ile başlayan verinin görüntülenecek olması. Aslında yapmak istediğim şey son derece basit ki, zaten istediğimi bir parçada almış olmama rağmen, işin içine Türkçe karakterle başlayan veriler girdiğinde sonuç beklentilerim ile uyuşmuyordu. Yine örnek verecek olursam, ’İ’ harfine göre bir listeleme yapmak istediğimde, liste içerisinde ’I’ ile başlayan verilerde yer alıyordu. Neyse ki sorunun çözümünü yine kendim buldum. Aslında tüm sıkıntı veritabanında yer alan tabloların kendine has özelliklerinden kaynaklanıyormuş. Prensip olarak tablo karakter setlerini ’utf8’ olarak belirlerim. Collation (Karşılaştırma) değerini ise ön tanımlı olan ’utf8_general_ci’ olarak bırakırdım. İşte hata tam olarak bu noktada başlıyor, Collation özelliğini ön tanımlı olarak bırakmak yerine ’utf8_turkish_ci’ olarak ayarlamamın istediğim sonucu sağladığını gördüm. Ancak belirtmeliyim ki, ’utf8_turkish_ci’ ayarı, uluslararası projelerde neler götürür kestiremiyorum. Bu yüzden sanırım, yabancı dilde hazırladığım sitelerde ’utf8_general_ci’ yada ’utf8_unicode_ci’ ayarlarını kullanmaya devam edeceğim.

Önemli Not: Yalnız bu değişikliği eğer fulltext indeks içerikli tablolarda yapmak isterseniz bazı hatalar ile karşılaşabilirsiniz. Bu yüzden öncelikle fulltext indeksleri kaldırmanızı ve Collation (karşılaştırma) ayarlarını yaptıktan sonra fulltext indeksleri tekrar tanımlamanızı öneriyorum.

Char ve Varchar veritipleri arasındaki farklar

Published / by Uğur Özşahin / Leave a Comment

    Veritabanı ile uğraşanlar bilirler, veritipleri performans ve veri kapasitesi bakımından önemli bileşenlerdir. Oluşturulan alanlarda öncelikli olarak işimize uygun olacağını düşündüğümüz veritipleri ile çalışmak hedeflerimizin başında gelir. Yakın zamanda  Char ve Varchar veri tipleri arasındaki farklar konusunda yeterli bilgiye sahip olmadığımın farkına vardım ve hem not almak, hemde paylaşmak maksadı ile buraya yazmak istedim.

    Char ve Varchar veritipleri arasındaki farkları bir liste halinde aşağıda bulabilirsiniz.

  • Char veritipi 0 ile 255 karakter arasında veri tutabilirken, Varchar veritipi MySQL v5,03 ten itibaren 0 ile 65,535 karakter arasında veri tutabilmektedir. MySQL’in önceki versiyonlarda ise Char veritipi ile aynı kapasiteye sahiptir.
  • Char veritipi, tanımlandığı kadar kapasitenin tamamını kullanır. Örnek olarak siz 50 karakterlik bir alan tanımlamışsanız, bu alana 20 karakter bile girmiş olsanız, geriye kalan sağdan 30 karakterlik alan boşluk karakteri ile doldurulur. Varchar veritipi ise değişken bir yapıya sahiptir ve tanımlanan karakter katarına kadar olan boyutta değişkenlik gösterebilir. Yine örnek vermemiz gerekirse, 50 karakterlik bir alan için 30 karakter girdiğinizde hafızada sadece 30+1 karakterli bir alan kaplar.
  • Char veritipinin kullanım alanı olarak sabit uzunluklu veri yapıları gösterilebilir. (Örn: telefon numaraları, kredi kartı no vb.) Varchar ise değişken uzunluklu veri yapıları için uygundur. (Örn: isim, mail vb.)
  • Ayrıca bir tabloda varchar veritipinde tek bir alan bile yer alsa, bu aynı tablodaki diğer char veritipi ile belirlenmiş alanlarında Varchar biçiminde çalışmasına neden olur.

    Burada bahsettiklerim dışında başka farklılıkların olduğunu biliyorsanız, yorum kısmında belirtebilirsiniz.

OpenOffice.org Base ile MySQL Veritabanı Yönetimi

Published / by Uğur Özşahin / Leave a Comment

OpenOffice.org, Microsoft Office paketinin alternatifi sayılabilecek açık kaynak ücretsiz bir program paketi. Açıkçası paket içeriği hakkında uzun uzadıya bilgi vermek istemiyorum. Yalnızca paket içerisinde gelen Base programı ile MySQL veritabanlarına nasıl bağlanabileceğiniz konusunda bilgi vereceğim.

Öncelikle OpenOffice.org Base programını çalıştırmadan önce, OpenOffice.org platformumuza MySQL Native Driver eklentisini kurmalıyız. Bunun için kullandığınız işletim sistemine göre verdiğin linkten eklenti dosyasını çekmelisiniz.

MySQL Native Driver eklentisini şu sayfadan indirebilirsiniz. Açtığınız sayfadan, işletim sisteminize uygun olan eklentiyi çekmeniz gerekmekte. Windows kullanıcıları sonu win32.oxt ile biten dosyayı bilgisayarlarına indirmeliler. Linux kullanıcıları muhtemelen hangisini indireceklerini tahmin ediyorlardır.

Sıra geldi indirdiğimiz eklentiyi OpenOffice.org içine kurmaya. Bunun için OpenOffice.org programımızı çalıştırıyoruz.

 

Resimde Görüldüğü üzere Tools Menüsünden Extension Manager ı çalıştırıyoruz.

Gelen sayfada Add butonuna tıklıyoruz.

Karşımıza indirdiğimiz eklentiyi, belirtmemiz gereken pencere geldi. Bu pencerede eklentiyi bilgisayarınızda nereye indirmişseniz oraya giderek eklentiyi seçip Aç butonuna tıklamalısınız.

Sonuç yukarıdaki gibi olmalı. MySQL Native Driver Eklentisi artık OpenOffice.org içine kurulmuş durumda.

Artık OpenOffice.org Base programını çalıştırabilir ve Database Wizard ile yönetmek istediğimiz veritabanına bağlantı oluşturabiliriz.

Programı çalıştırdığımızda karşımıza yukarıdaki gibi bir pencere geliyor. Seçenekleri Aynen pencerede göründüğü şekilde düzenlemeli ve Next butonuna tıklamalısınız.

Bir sonraki aşamada karşımıza çıkan metin kutusuna veritabanına ulaşmamız için gereken, host adını, port numarasını ve veritabanı adını girmeliyiz. Örn: “localhost:3306/veritabani_adi” Bu sayfada da bir sonraki adım için Next butonuna tıklıyoruz.

Bu sayfada ise veritabanınız için gereken kullanıcı adını girmeli ve eğer şifre gerektiriyorsa Password Required işaret kutusunu doldurmalısınız. Dilerseniz direk Finish butonuna tıklayabilir ve 1 adım atlayabilirsiniz. Next butonuna bastığınız taktirde aşağıdaki pencere ile karşılaşacaksınız.

Bu penceredeki ayarlar ile dilerseniz ve işinize yarayacağını düşünüyorsanız oynayabilirsiniz. Ben default haliyle bırakıyorum. Artık Finish butonuna tıklayabiliriz.

Bu sefer veritabanımız için bir dosya adı belirliyor ve sonunda MySQL veritabanımıza ulaşabiliyoruz.

Tüm işlem bu kadar adım adım anlattığım için uzun gibi gözükebilir ancak son derece basit ve hızlı bir çözüm. Ayrıca Base programının bağlanabildiği veritabanları MySQL ile sınırlı değil, Access, Oracle ve daha birçok veritabanı için bu programdan yararlanabilirsiniz. Bu işlem için çok daha profesyonel yazılımlardan, hatta tek veritabanı sunucusu için özelleştirilmiş çözümlerden de hiç kuşkusuz yararlanabilirsiniz, açıkçası bu çözüm bir çok arkadaşa yeterli gelmeyebilir fakat denemeye değer bulanlar muhakkak olacaktır.

Apache Başlatma Sırasında Meydana Gelen Hata

Published / by Uğur Özşahin / Leave a Comment

    Baştan gerçekleştirdiğim windows xp sp3 kurulumu sonrasında tüm taşınabilir (Portable) uygulamalarımı test etmeye karar verdim. Elbette bunların arasında XAMPP ta yer alıyor. XAMPP içinde Apache, MySQL, Filezilla ve Mercury gibi servisleri barındıran bir web server. XAMPP kullananlar bilirler, XAMPP ı istediğiniz herhangi bir dizinde kullanabilmeniz için XAMPP ana dizini içerisinde yer alan setup_xampp.bat adlı dosyayı dizin ayarlarının otomatik olarak yapılması için çalıştırmanız gerekir. Benimde ilk yaptığım işlem bu oldu. Bir sonraki adımda ise XAMPP Control Panel i çalıştırıp, Apache ve MySql i başlatmak istedim. Ancak MySql sorunsuz olarak başlamasına rağmen, Apache yi başlatma sırasında şu hata mesajı ile karşılaştım.


    Biraz araştırdıktan sonra bu hata mesajına neden olabilecek birden çok etkenin olabileceğini gördüm. Ancak burada vereceğim ve benim sorunumun ortadan kalkmasını sağlayan tek bir çözüm söz konusu. Çözümün adı Visual C++ Çalışma kütüphaneleri. Apache çalışabilmek için bu kütüphanelere ihtiyaç duyuyor. Çalışma kütüphanelerini bilgisayarınıza kurabilmek için aşağıda linkini verdiğim dosyayı bilgisayarınıza çekip, kurulum işlemini gerçekleştirmelisiniz.

http://www.microsoft.com/downloads/i…redist_x86.exe

mysqli_connect() Fonksiyonu

Published / by Uğur Özşahin / Leave a Comment

    PHP üzerinde uğraştığım ve en çok sorun yaşadığım konulardan biri veritabanlarıdır. Sonuçta bir çok projemin temelinde öyle yada böyle bir şekilde veritabanları söz konusudur. Özellikle PHP söz konusu olduğunda, bu veritabanı meselesi daha çok ön plana çıkmaya başladı. Bildiğiniz gibi günümüzde PHP ile birlikte en çok kullanılan veritabanlarından biri MySQL. Doğal olarak benimde daha çok üzerinde durduğum veritabanlarını oluşturuyorlar. Maalesef her geçen gün bu konuda yeni bir şey öğrenmek ile birlikte, bazı takıldığım noktalarda olmuyor değil.

    Bir arkadaşımdan öğrendiğim bir hazır scripti, kendi serverımda denemek isterken scriptin kurulumu sırasında, veritabanı ile iletişim kurmak için girdiğim ve doğruluğundan tamamen emin olduğum veritabanına erişim bilgilerine rağmen bir problem ile karşılaştım. Daha sonra kurulum dosyasının kodlarını incelediğimde, veritabanı bağlantısı  için mysql_connect() fonksiyonu yerine mysqli kütüphanesinden yararlanılabilmesi için kullanılan mysqli_connection() fonksiyonuna rastladım. Zaten aldığım hatada veritabanı ile bağlantı kurulamadığı yönündeydi. Dolayısı ile tekrar yaptığım incelemelerimde her verinin doğru girilmesine karşın, karşılaştığım sorunun mysqli_connection() fonksiyonunun kullanımı ile ilgili olduğu sonucuna vardım. Yani kısaca mysql_connection() fonksiyonun aldığı parametreler ile mysqli_connection() fonksiyonunun aldığı parametrelerin birbirlerinden bariz farklılıklar barındırdığını anladım.

mysqli_connection();

    mysql_connection() ve mysqli_connection() parametrelerini kısaca açıklayacak olursak;

mysql_connection(server, username, password, new_link, client_flags)


server parametresi: mysql server adresi ve portu
username parametresi: mysql server için kullanıcı adı
password parametresi: mysql server için şifre
new_link ve client_flags parametreleri bizi şimdilik ilgilendirmeyen ve default değerlere sahip parametreler.

mysqli_connection(host, username, passwd, dbname, port, socket)


host parametresi: mysql server
username parametresi: mysql server için kullanıcı adı
passwd parametresi: mysql server için şifre
dbname parametresi: mysql veritabanın adı
port parametresi: mysql server’a ait iletişim port numarası
socket parametresi default değere sahip benimde hakkında pek bilgi sahibi olmadığım başka bir parametre.

    Şimdi diyebilirsiniz, zaten en başta bu iki fonksiyonun aldığı parametrelerin sayıları farklı. Ancak şunu belirtmeliyim bu parametrelerin sayıları farklı olduğu gibi, aynı işleve sahip olması beklenen parametrelerin kullanımında da önemli farklar ortaya çıkmakta. Örnek olarak ben mysql_connection() fonksiyonunda kullanılan server parametresi ile mysqi_connection() fonksyionunda kullanılan host parametresinin aynı olmasını beklerken, ne kadar büyük bir yanılgı içinde olduğumun farkına vardım. Zaten en başta yaşadığım problemin temelinde bu farklılık baş göstermekteydi. Aşağıya örnek olarak iki bağlantı kodu yazacağım:

mysql_connection("localhost:3306","root","xxxx");
fonksiyonu çalışırken

mysqli_connection("localhost:3306","root","xxxx","veritabani");
fonksiyonunun çalışmadığına şahit olacaksınız. Bir önceki paragrafta belirttiğim gibi bunun nedeni ilk parametrenin kullanımının önemli bir şekilde farklı olması. Parametrelerden bahsettiğimde de anlaşılmış olduğunu düşündüğüm bu fark Port parametresinden ileri gelmekte. O parametreyi oraya boşuna sıkıştırmamışlar değil mi? 😉 Fonksiyonun doğru kullanımına örnek verecek olursak;

mysqli_connection("localhost","root","xxxx","veritabani",3306); olmalı.



    İşte yeni öğrenmiş olduğum fonksiyon ile birlikte basit ancak, önemli olduğuna inandığım sorunun çözümü. PHP de fonksiyonlara ait parametre ve diğer bilgilere çabuk ulaşmak istiyorsanız browserınızın (ie, firefox)  adres satırına http://tr2.php.net/ ile birlikte fonksiyonunuzu yazmanız yeterli olacaktır.

Örnek: strtr(); fonksiyonu için http://tr2.php.net/strtr