Çoğu işletme sahibi karakter bozulmasını basit bir görsel kusur sanır. Ürün adında "Ünlü" yazması gerekirken "Ünlü" görünür, sipariş notunda soru işaretleri belirir, müşteriye giden e-postada isim tanınmaz hâle gelir. Çözüm olarak bozuk kayıtları elle düzeltir, bir süre rahat eder, sonra yeni siparişlerde aynı manzara geri gelir. Bu noktada genellikle "tema bozuk" veya "tarayıcı sorunu" denip geçilir.
Gerçek şu: karakter bozulması bir görüntü sorunu değil, veri sorunudur ve bozulduğu anda geri dönüş her geçen gün zorlaşır. Çünkü bir metin yanlış karakter setinde kaydedildiğinde orijinal bilgi kaybolmaz, sadece yanlış yorumlanır; ama üstüne bir kez daha yanlış dönüşüm uygulanırsa bilgi gerçekten kaybolur. Bu yazıda bir epin scripti kurulumunda karakterlerin hangi noktalarda bozulduğunu, veritabanının sana yıllardır sakladığı üç baytlık kısıtlamayı, bozulmuş veriyi nasıl kurtaracağını ve bir daha bozulmaması için hangi sözleşmeyi kuracağını anlatıyoruz.
Türkçe Karakterler Gerçekten Kayboldu mu, Yoksa Yanlış Gözlükle mi Bakıyorsun?
Bir metin bilgisayarda harf olarak değil bayt dizisi olarak durur. Aynı bayt dizisi farklı karakter setleriyle okunduğunda farklı harfler üretir. "ü" gördüğünde aslında olan şudur: veri doğru kaydedilmiştir, ancak okuma sırasında yanlış set kullanılmıştır. Bu durumda veri sağlamdır ve tek bir ayar düzeltmesiyle her şey yerine oturur. Soru işareti veya boş kare gördüğünde ise durum farklıdır: karakter kaydedilirken hedef sette karşılığı bulunamamış ve yerine vekil bir işaret yazılmıştır. Bu, gerçek ve geri dönüşü olmayan bir kayıptır.
Teşhisi netleştirmek için ikili bir test yap. Aynı kaydı hem panelden hem doğrudan veritabanı arayüzünden oku. İkisinde de bozuksa veri bozuk kaydedilmiştir. Panelde bozuk, veritabanı arayüzünde doğru görünüyorsa okuma katmanında bir uyumsuzluk vardır. Panelde doğru, dışa aktardığın dosyada bozuksa dışa aktarma katmanı suçludur. Bu üç ayrım, bir dijital ürün satış scriptinde sorunu saatler yerine dakikalar içinde yerelleştirir.
utf8 ile utf8mb4 Arasındaki Üç Baytlık Yalan
Yıllarca kurulum belgelerinde "karakter setini utf8 yap" yazdı ve herkes bunu yaptı. Ancak popüler veritabanı sunucularındaki utf8 adı verilen set, evrensel kodlamanın tamamını değil yalnızca üç bayta sığan bölümünü destekler. Türkçe harfler bu aralığa girer, dolayısıyla yıllarca sorun görünmez. Sorun, müşteri sipariş notuna bir emoji yazdığında veya bazı uzak dil karakterleri içeren bir oyun adı sisteme girdiğinde patlar: o karakter dört bayt gerektirir, sığmaz ve ya kayıt kesilir ya da o noktadan sonrası silinir.
Bu yüzden doğru tercih dört bayt destekli tam evrensel kodlamadır. Yeni kurulan bir e-pin satış yazılımında hiçbir gerekçe bunu atlamayı haklı çıkarmaz. Mevcut bir sistemi dönüştürürken dikkat edilecek tek nokta indeks uzunluklarıdır: karakter başına ayrılan azami bayt arttığı için çok uzun metin kolonlarındaki indeksler sınırı aşabilir. Bunun çözümü indeksi kısaltmak veya kolon uzunluğunu makul bir değere indirmektir; karakter setinden vazgeçmek değil.
| Belirti | Ne Görürsün | Gerçek Durum | Kurtarılabilir mi |
|---|---|---|---|
| Çift harf bozulması | ü, ç, ı, Å | Veri doğru, okuma seti yanlış | Evet, tam olarak |
| Soru işareti | Türk?e, ?zel | Kayıt anında karşılık bulunamadı | Hayır |
| Boş kare veya elmas | Tanımsız simge | Yazı tipi eksik veya vekil karakter | Kısmen |
| Metin ortadan kesilmiş | Cümle yarıda bitiyor | Dört baytlık karakter sığmadı | Hayır |
| Sadece e-postada bozuk | Panel doğru, posta bozuk | Posta başlığında set bildirilmemiş | Evet |
| Sadece dışa aktarmada bozuk | Tabloda doğru, dosyada bozuk | Dosya başlığı veya set uyumsuz | Evet |
Bağlantı Karakter Seti: Veritabanı Doğru, Kapı Yanlış
En çok kafa karıştıran senaryo şudur: veritabanı da tablo da kolon da doğru karakter setinde, ama kayıtlar gene bozuk düşüyor. Sebebi neredeyse her zaman aynıdır: bağlantı karakter seti. Uygulama veritabanına bağlandığında hangi sette konuşacağını bildirmelidir. Bildirmezse sunucunun varsayılanı kullanılır ve bu varsayılan genellikle eski bir Batı Avrupa setidir. Uygulama doğru baytları gönderir, kapıda yanlış set devreye girer ve veri dönüştürülerek bozulmuş hâlde kaydedilir.
Bu tuzağın sinsiliği, kurulumdan aylar sonra ortaya çıkabilmesidir. Sunucu taşındığında, barındırma sağlayıcısı bir güncelleme yaptığında ya da veritabanı bağlantısı için farklı bir sürücüye geçildiğinde varsayılan değişir ve yeni kayıtlar bozulmaya başlar. Eski kayıtlar sağlam kalır, yeni kayıtlar bozuk olur; aynı tabloda iki farklı gerçeklik oluşur. Bu yüzden bağlantı seti asla varsayılana bırakılmamalı, her bağlantıda açıkça bildirilmelidir. Pinova bunu bağlantı katmanında zorunlu bir adım olarak uygular; sunucu varsayılanı ne olursa olsun oturum tek bir sette açılır.
Karakter Bozulmasının Gerçekleştiği Duraklar
- Veritabanı bağlantı seti bildirilmemiş 45%
- Tedarikçi dosyası veya API yanıtı 25%
- Sayfa veya posta başlığı eksik 20%
- Yedek alma ve geri yükleme sırasında 10%
Tedarikçi Dosyaları ve Besleme Servisleri Neden Her Gün Yeni Çöp Üretiyor?
Ürün kataloğunu elle yazmıyorsan, veri sana dışarıdan geliyor: tedarikçinin tablo dosyası, bir besleme adresi veya bir API yanıtı. Bu kaynakların hiçbiri senin karakter seti tercihini bilmek zorunda değildir. Türkiye'de yaygın olarak kullanılan masaüstü tablo programları, dosyayı varsayılan olarak Windows'un yerel setinde kaydeder. Sen o dosyayı evrensel kodlama varsayarak okursan, Türkçe harflerin tamamı bozulur. Üstelik bu bozulma her içe aktarmada tekrarlanır; yani kaynağı düzeltmeden yaptığın her onarım bir sonraki senkronizasyonda silinir.
Doğru yaklaşım içe aktarma katmanına bir karakter seti kapısı koymaktır. Dosya okunmadan önce kodlaması tespit edilir, gerekiyorsa hedef sete dönüştürülür ve ancak sonra işlenir. API yanıtlarında ise yanıt başlığındaki set bildirimine güvenilmeli, bildirim yoksa güvenli bir varsayılan seçilip doğrulama yapılmalıdır. Bir epin yazılım kurulumunda içe aktarma katmanı, kalenin en zayıf duvarıdır ve önce orası sağlamlaştırılmalıdır.
İçinde Türkçe harflerin tamamı ve bir emoji bulunan bir test ürünü oluştur, kaydet, sonra hem panelden hem dışa aktarma dosyasından oku. Üç durakta da aynı görünüyorsa zincir sağlamdır; biri bile farklıysa kırılma noktasını bulmuşsun demektir.
Bozulmuş Veriyi Nasıl Geri Kazanırsın, Nasıl İki Kat Bozarsın?
Onarımın altın kuralı şudur: önce yedek al, sonra tek bir kayıt üzerinde dene, ancak sonra toptan uygula. Çift bozulma tipindeki veriler kurtarılabilir çünkü orijinal baytlar hâlâ orada durur, sadece bir kez fazla yorumlanmışlardır. Bu durumda yapılacak iş, metni bozulmaya yol açan sette geri okuyup doğru sette yeniden yazmaktır. Bu işlem doğru yapıldığında veri harfi harfine geri gelir.
Tehlike, bu işlemi zaten sağlam olan kayıtlara uygulamaktır. Sağlam bir kaydı bozulma varsayarak dönüştürürsen onu gerçekten bozarsın ve ikinci kez geri dönemezsin. Bu yüzden onarım mutlaka seçici olmalıdır: sadece bozulma imzası taşıyan kayıtlar işlenmeli. Karışık bir tabloda en güvenli yol, bozulmuş kayıtları bir desen araması ile listeleyip kümeyi gözle doğruladıktan sonra o kümeye dokunmaktır. Yedek almadan yapılan toptan dönüşüm, bir dijital ürün satış yazılımında geri dönüşü olmayan tek hatadır.
Kalıcı Çözüm: Uçtan Uca Tek Karakter Seti Sözleşmesi
Karakter bozulması, yama yapılacak bir hata değil, ihlal edilmiş bir sözleşmedir. Sözleşme şudur: veri zincirin her durağında aynı karakter setinde konuşur. Bu duraklar veritabanı sunucusu, veritabanı, tablo, kolon, bağlantı oturumu, uygulama iç kodlaması, sayfa başlığı, form gönderimi, e-posta başlığı, dışa aktarma dosyası ve yedek dosyasıdır. On bir durak; biri farklıysa zincir kırılır.
Pratikte bu sözleşmeyi kurmak bir kereliktir ve sonrasında sorun tamamen kaybolur. Kurulum sırasında tüm katmanlar tek sette tanımlanır, bağlantı açıkça bildirilir, içe aktarma kapısına dönüştürücü konur, dışa aktarma dosyalarına doğru başlık yazılır ve yedekler set bilgisi korunacak biçimde alınır. Bundan sonra müşteri adında kesme işareti, ürün adında özel harf veya sipariş notunda emoji olması hiçbir şeyi bozmaz. Bu katmanların nasıl kurulduğunu özellikler bölümünde inceleyebilir, kendi kataloğunla test etmek için paketleri karşılaştırabilirsin.
| Durak | Nasıl Doğrularsın | Geçti Sayılma Ölçütü |
|---|---|---|
| Veritabanı ve tablo seti | Şema bilgisini sorgula | Tümü dört bayt destekli tek set |
| Bağlantı oturumu | Bağlantı açıldıktan sonra seti oku | Varsayılana bırakılmamış, açık bildirim |
| Sayfa başlığı | Yanıt başlığını incele | Set açıkça belirtilmiş |
| Form gönderimi | Türkçe ve emoji içeren veri gönder | Kayıt birebir aynı |
| E-posta çıktısı | Kendine test teslimatı gönder | Konu ve gövde bozulmasız |
| İçe aktarma kapısı | Yerel sette kaydedilmiş dosya dene | Otomatik dönüştürülüp doğru kaydediliyor |
| Yedek ve geri yükleme | Yedeği test ortamına yükle | Geri yüklenen veri bozulmasız |
Kataloğun bir daha bozulmasın
Uçtan uca tek karakter seti, zorunlu bağlantı bildirimi ve dönüştürücülü içe aktarma kapısı Pinova'da hazır kurulu gelir. Bozuk kayıtları elle düzeltmek yerine sorunu kaynağında kapat.
Veritabanım utf8, neden hâlâ bozulma yaşıyorum?
Popüler veritabanı sunucularındaki utf8 seti evrensel kodlamanın sadece üç bayta sığan bölümünü destekler. Emoji ve bazı özel karakterler dört bayt gerektirir ve sığmaz. Dört bayt destekli tam sürüme geçmelisin.
Ekranda ü gibi karakterler görüyorsam verim gitti mi?
Hayır. Bu tipik çift yorumlama belirtisidir ve veri sağlamdır. Okuma katmanındaki seti düzelttiğinde ya da seçici bir onarım uyguladığında metin harfi harfine geri gelir.
Soru işaretine dönmüş kayıtları kurtarabilir miyim?
Genellikle hayır. Soru işareti, karakterin kayıt anında hedef sette karşılığı bulunamadığı ve yerine vekil işaret yazıldığı anlamına gelir. Orijinal bilgi kaybolmuştur; kaynaktan yeniden içe aktarmak gerekir.
Tedarikçi dosyaları her seferinde bozuk geliyor, ne yapmalıyım?
Onarımı kayıt üzerinde değil içe aktarma katmanında yap. Dosyanın kodlamasını tespit edip hedef sete dönüştüren bir kapı kur; aksi hâlde her senkronizasyon düzelttiğin veriyi yeniden bozar.
Karakter bozulması, dijital ürün satan bir işletmede güvenilirliğin en görünür çatlağıdır: müşteri kendi adını bozuk gördüğünde ödeme altyapına da temkinli yaklaşır. Zincirin on bir durağını tek sette konuşturmuş bir sistemin nasıl davrandığını kendi Türkçe kataloğunla denemek istersen canlı demo üzerinden ürün ekleyip dışa aktarabilir, ardından fiyat bölümünden ihtiyacına uygun paketi seçebilirsin.

