Selamlar herkese, dün gece başıma gelen ve bana web dünyasına ilk adım attığım 2000'lerin başını hatırlatan nostaljik ama bir o kadar da sinir krizi geçirtici bir mevzuyu açayım dedim.
Eski bir müşterinin ta 2012'den kalma PHP ve MySQL ile yazılmış butik sitesini başka bir sunucuya taşımam gerekti. "Aman alt tarafı 50 MB veritabanı, export alır yeni yere basarım 10 dakikada biter" dedim kendi kendime. Ah demez olaydım... Veritabanını yeni sunucuya aktarıp siteyi bir açtım; ana sayfada dev gibi "HO?GELDÝNÝZ", menülerde "Ür?nlerimiz", iletişim kısmında "Ýletiþim" yazıyor. Ekranla resmen bakıştık bir süre.
Sunucu Taşırken Yaşanan O Meşhur Şok
Yıllar geçmiş, PHP sürümleri atlamış, MySQL yerini MariaDB'ye bırakmış ama şu karakter kodlama çilesi asla eskimemiş meğer. Eski sunucu verileri latin5_turkish_ci tutmuş, export alırken mysqldump kafasına göre latin1 basmış, yeni sunucudaki phpMyAdmin ise ısrarla utf8mb4 diye diretiyor.
İşin en komik yanı da bağlantı dosyasına `mysqli_set_charset($baglanti, "utf8");` ekleyince yarısı düzelip diğer yarısının kare kutucuklara dönmesi oldu. Bir tarafta çift encode olmuş ş'ler, öbür tarafta soru işaretine dönen ğ'ler... Gece saat ikide Notepad++ açıp binlerce satırlık SQL dosyasında regex ile harf avına çıktım resmen.
Bu İlletten Nasıl Kurtuluyorsunuz?
Ben en son çare SQL dump dosyasını Notepad++ üzerinde UTF-8 (BOM olmadan) formatına çevirip, tabloların Collation ayarlarını tek tek elden geçirerek çözdüm ama iki saatlik uykumdan da oldum.
Aranızda hala bu charset facialarını yaşayan var mı? Eski siteleri taşırken "şak" diye sıfır kayıpla karakterleri kurtaracak pratik bir numaranız, kullandığınız temiz bir script var mı yoksa siz de benim gibi amele usulü SQL dosyasıyla mı boğuşuyorsunuz?