Leoman’s blog

bi blög

Archive for the ‘linkedin’ tag

MySQL’de karakter seti problemi yoktur!

one comment

Bir çok insan tarafından ÅŸu sözleri duyuyorum;  “MySQL’de veritabanı aktarınca karakter problemi çıkıyor.”, “MySQL’de karakter seti problemi var.”

Hayır efendim MySQL’de karakter seti problemi yoktur, MySQL’in huyunu suyunu bilmeyen insan vardır.

MySQL veritabanı çalışmasında iki tane farklı karakter seti kullanır. Bunlardan birincisi veritabanı motoruna (database engine; MyISAM, InnoDB) verilir. İkincil olarak baÄŸlantı karakter setidir ve MySQL Client’a verilir.

Öntanımlı MySQL kurulumlarında (Örneğin; Distro repolarından, cPanel, Plesk, vb. hosting otomasyon yazılımları ile)  bağlantı ve veritabanı karakter seti latin1 olarak gelmektedir.

En sık yapılan hatayı şöyle basit bir hatadır. KiÅŸi gider veritabanını UTF-8 olarak yaratır. Sonra PHP ile sadece baÄŸlanır ve sürekli veri yazar fakat bu veriyi yazdıran zat-ı muhterem bu sunucuya baÄŸlantı sırasında MySQL Client’ın kullandığı karakter seti merak etmez. Bunu irdelemediÄŸi için de UTF-8 veritabanına Latin1 ile baÄŸlanır ve verileri böyle yazar. Sonuç! absürt karakterlere sahip bir veritabanı.

Ne yapıyormuşuz demek ki, veritabanını istediğimiz karakter seti ile yaratıyormuşuz, daha sonra bağlanırken de veritabanının sahip olduğu karakter seti ile bağlanıyormuşuz. Evet tam olarak böyle.

Mesela UTF-8 bir veritabanı yarattığımızı varsayalım. Buna bağlanırken kesinlikle şunu yapmıyoruz;

 PHP |   |? 
1
2
mysql_connect("server","kullanici","sifre");
3
mysql_select_db("veritabani");
4
mysql_query("insert into tablo ('a','b') values ('ÇÖPĞÖÜĞÜ','İŞÜĞÜMÖMÖM')");
5

Bunun yerine; bağlantıdan hemen sonra bir seferlik;
 PHP |   |? 
1
2
mysql_connect("server","kullanici","sifre");
3
mysql_select_db("veritabani");
4
mysql_query("SET NAMES UTF8");
5
mysql_query("SET CHARACTER SET UTF8");
6
 
7
mysql_query("insert into tablo ('a','b') values ('ÇÖPĞÖÜĞÜ','İŞÜĞÜMÖMÖM')");
8

durumu MySQL’e bildiriyoruz.

Tabi ki bir projede 50 yerde baÄŸlantı kuranlar bu noktada OOP’nin neden varolduÄŸunu anlayabilirler.

- “Ee bilmem ne SQL Server bunu otomatik seçiyormuÅŸ”.

- Peki multi collation olan bu sistemde farklı farklı tablolar için ne yapmayı düşünüyorsun? diye sormazlar mı kişiye.

Önemli olan nasıl yediğin değil, o yoğurdu yemek!

Written by leoman

June 10th, 2009 at 6:44 pm

SEO, .htaccess ve klasör değişiklikleri

leave a comment

Blog’umu kaybettiÄŸimi çok geç farkettikten sonra haliyle arama motorlarının da artık blog’umu yanlış içerikleri ve yanlış linkleri ile gösterir durum olduÄŸunu anladım. Arama motorlarının, tarama sırasında defalarca 404 hatası ile karşılaÅŸmaktan hoÅŸlanmayacağı için buna SEO dostu bir çözüm bulmak gerekmek idi.

Gidişata göre şanslı olduğum noktalar sırası ile Apache gibi kolay esneyebilen yapıda bir web sunucu kullanmam, eski blogumun ana dizinde değil de bir alt dizinde (/blg alt dizininde) olması idi.

BildiÄŸiniz üzre Apache web sunucusu .htaccess adlı bir dosya ile ÅŸahsa ve isteklere münhasır hale getirilebilmekte ve mod_rewrite modülü ile de URL‘ler üzerinde dilediÄŸiniz gibi deÄŸiÅŸiklik yapma imkanı sunmaktadır. Bu imkanlar dahilinde ben de arama motorlarınca eski blogumdaki iÅŸaretlenen linkleri, gelen ziyaretçilere (özellikle arama motoru robotlarına {örneÄŸin: Google bot} ) buradan taşındığını belirtmeyi seçtim. Böylece arama motorları bu sayfaları bir daha blog’um üzerinde aramayacaktı ve arama sonuçlarından kısa sürede kalkacaktır.

Bunun nasıl yaptım!

Blog’umun hali hazırda kullanmış olduÄŸu .htaccess dosyası içerisine yalnızca bir satır eklemek bunun için yeterli oldu.

 Apache configuration |   |? 
1
2
RewriteEngine On
3
RewriteBase /
4
RedirectMatch 301 /blg(.*) /
5
RewriteCond %{REQUEST_FILENAME} !-f
6
RewriteCond %{REQUEST_FILENAME} !-d
7
RewriteRule . /index.php [L]
8

Burada birinci satırla beraber rewrite modülü aktif hale getirip ikinci satır ile birlikte kök ve tüm alt dizinleri  için geçerli olduÄŸunu belirttik. Asıl olayımız ise üçüncü satırda, kök dizin içerisinde blg ile baÅŸlayan herhangi bir URL olduÄŸunda HTTP 301 hata kodu, yani kalıcı olarak buradan taşındı yönlendirme direktifi oluÅŸturarak tekrar kök dizine yönlendirmesi ile tamamlanmış oldu. Böylece artık arama motorları, dışarıdan gelen linkler http://leoman.gen.tr/blg/eski-bir-post sayfasına ulaÅŸamadıklarında “404 – sayfa bulunamadı” hatası almak yerine bu sayfanın burda olmadığına dair bir yönlendirme alacaklar ve http://leoman.gen.tr/ adresine yönlenecekler. Böylece kimse tarafından kötü çocuk olarak gözükmeyeceÄŸim.

Bu gibi bir değişikliği ise sadece bir alt klasörden kök dizine taşımak için yapacaksanız şu direktifi de kullanabilirsiniz.

 Apache configuration |   |? 
1
2
RedirectMatch 301 /blg(.*) /$1
3

Örneğe göre; http://leoman.gen.tr/blg/eski-bir-post adresine gelen istekler http://leoman.gen.tr/eski-bir-post adresine yönlenecekler.

Bol SEO’lu 404′süz günler efendim.

Written by leoman

December 16th, 2008 at 3:22 am