Teknik

Epin Satış Scriptinde Türkçe Karakterler Bozuluyor mu? Veritabanının Sana Yıllarca Sakladığı Üç Baytlık Yalanı ve Kalıcı Onarım Yöntemini Açıklıyoruz

Epin satış scriptinde karakter bozulması neden olur? utf8 ile utf8mb4 farkı, bağlantı karakter seti tuzağı ve bozuk veriyi kalıcı onarma yöntemi.

Epin Satış Scriptinde Türkçe Karakterler Bozuluyor mu? Veritabanının Sana Yıllarca Sakladığı Üç Baytlık Yalanı ve Kalıcı Onarım Yöntemini Açıklıyoruz

Ç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.

4 baytBir emoji veya bazı özel karakterin gerçek boyutu
3 baytEski utf8 setinin taşıyabildiği azami boyut
6Metnin bozulabileceği bağımsız durak sayısı
%100Çift dönüşüm uygulanmış verilerde geri dönüşü imkânsız kayıp riski

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.

BelirtiNe GörürsünGerçek DurumKurtarılabilir mi
Çift harf bozulmasıü, ç, ı, ÅVeri doğru, okuma seti yanlışEvet, tam olarak
Soru işaretiTürk?e, ?zelKayıt anında karşılık bulunamadıHayır
Boş kare veya elmasTanımsız simgeYazı tipi eksik veya vekil karakterKısmen
Metin ortadan kesilmişCümle yarıda bitiyorDört baytlık karakter sığmadıHayır
Sadece e-postada bozukPanel doğru, posta bozukPosta başlığında set bildirilmemişEvet
Sadece dışa aktarmada bozukTabloda doğru, dosyada bozukDosya başlığı veya set uyumsuzEvet

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.

Tek satırlık sağlık testi

İç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.

DurakNasıl DoğrularsınGeçti Sayılma Ölçütü
Veritabanı ve tablo setiŞema bilgisini sorgulaTümü dört bayt destekli tek set
Bağlantı oturumuBağlantı açıldıktan sonra seti okuVarsayılana bırakılmamış, açık bildirim
Sayfa başlığıYanıt başlığını inceleSet açıkça belirtilmiş
Form gönderimiTürkçe ve emoji içeren veri gönderKayıt birebir aynı
E-posta çıktısıKendine test teslimatı gönderKonu ve gövde bozulmasız
İçe aktarma kapısıYerel sette kaydedilmiş dosya deneOtomatik dönüştürülüp doğru kaydediliyor
Yedek ve geri yüklemeYedeği test ortamına yükleGeri 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.

Daha Fazlasını Keşfedin

Dijital ürün satışı ve otomasyon üzerine güncel rehberlere göz atın.

Tüm Yazıları Gör →
Bu yazıyı paylaşın
Bu yazıyı beğendiniz mi?
Teşekkürler!
← Tüm yazılar