MySQL ve phpMyAdmin’de Türkçe karakter sorununu giderin

phpMyAdmin’de, SQL yedeğinizde ya da uygulamanızda ş yerine ÅŸ, ı yerine ı veya ? mi görünüyor? Çoğunlukla tablo, bağlantı ve içe aktarma birbirini tutmuyordur. Mojibuster dışa aktarımları doğrudan tarayıcınızda onarır – sonra MySQL’i kalıcı olarak doğru ayarlarsınız.

Metinle ve şu dosyalarla çalışır:

  • CSV
  • TXT
  • JSON
  • XML
  • SRT
  • VTT
  • SMI
  • TSV
  • MD
  • HTML
  • SQL
  • LOG

Örneğin Excel dışa aktarımları, veritabanı yedekleri, altyazılar veya web sitesi kodu.

Düzelt

  1. Bir dosya bırakın veya metni yapıştırın
  2. Düzeltme otomatik yapılır
  3. Kopyalayın veya indirin
ya da bir dosyayı buraya sürükleyin
  • Dosya yükleme yok. Dosyalarınız doğrudan tarayıcınızda düzeltilir ve cihazınızdan asla çıkmaz.

  • AB’de sunucular. Mojibuster, Finlandiya’daki (AB) bir sunucuda çalışır; Genel Veri Koruma Tüzüğü (GDPR) geçerlidir. GDPR metni (EUR-Lex)

MySQL’de karakter setinin üç yeri var

  • Sütun veya tablo: verinin saklandığı karakter seti, örneğin utf8mb4, latin1 ya da latin5 (Türkçe).
  • Bağlantı: istemci ile sunucunun konuştuğu karakter seti – SET NAMES utf8mb4 ile veya bağlantı ayarlarından belirlenir.
  • Dosya: içe aktarmanın okunduğu, dışa aktarmanın yazıldığı kodlama – phpMyAdmin’de Dosyanın karakter kümesi alanı.

Üçü birbirini tutmazsa karakterler bozulur. En sık görülen durum: UTF-8 Türkçe metin latin1 bağlantıyla latin1 sütuna yazılır. Uygulamada her şey düzgün görünür, ama phpMyAdmin ve dışa aktarım ÅŸ ile ı gösterir.

phpMyAdmin CSV dışa aktarımından bir satır

Önce

"1","Şükrü Çağlayan","Işıklar Mah. Gül Sok. 12","Diyarbakır"

Sonra

"1","Şükrü Çağlayan","Işıklar Mah. Gül Sok. 12","Diyarbakır"

Karakter setlerini kontrol edin

  • SHOW VARIABLES LIKE 'character_set%'; sunucu ve bağlantı ayarlarını gösterir.
  • SHOW CREATE TABLE musteriler; tablonun ve sütunların karakter setini gösterir.
  • SELECT ad, HEX(ad) FROM musteriler LIMIT 5; gerçek baytları gösterir: utf8mb4 sütunda C59F bir ş’dir, C385C5B8 ise çoktan bozulmuş ÅŸ’dir.

Dışa aktarımı veya yedeği onarın

  1. Tabloyu phpMyAdmin’de SQL veya CSV olarak dışa aktarın – ya da mysqldump --default-character-set=utf8mb4 ile alın.
  2. Dosyayı yukarıdaki kutuya bırakın. Mojibuster yalnızca bozuk yerleri onarır; doğru karakterlere dokunmaz.
  3. Onarılan yerleri Ne değişti? bölümünde kontrol edin ve dosyayı indirin.
  4. utf8mb4 bir tabloya aktarın ve içe aktarma penceresinde karakter kümesi olarak utf-8 seçin.
  5. Gerçek tabloyu değiştirmeden önce mutlaka bir kopyada deneyin.

Dışa aktarım bilgisayarınızdan hiç çıkmaz – müşteri verilerinde bu önemlidir. CSV olarak aldıysanız CSV dosyalarında Türkçe karakter sorunu sayfasına da bakın.

Nedeni giderin

  • Yeni tabloları DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_turkish_ci ile oluşturun. Türkçe sıralamada ı, i, İ ve I doğru ayrılır.
  • Uygulamanızın bağlantısını utf8mb4 yapın, PHP’de örneğin PDO DSN içinde charset=utf8mb4 kullanın.
  • UTF-8 baytlar latin1 bir sütundaysa doğrudan CONVERT TO kullanmayın – metni ikinci kez kodlar ve çifte kodlanmış metin oluşur. Güvenli yol ikili tür üzerinden geçer: önce MODIFY ad VARBINARY(255), sonra MODIFY ad VARCHAR(255) CHARACTER SET utf8mb4.
  • MySQL karakterleri ? ile değiştiriyorsa sütun veya bağlantı onları gösteremiyordur. Öyle kaydedilmiş veri kayıptır – ayrıntı için Türkçe harfler yerine soru işareti sayfası.

Sık sorulan sorular

Uygulamamda her şey düzgün, phpMyAdmin’de neden bozuk?

Çünkü uygulama ve veritabanı aynı hatayı iki kez yapıyor: uygulama UTF-8’i latin1 bağlantıyla yazıyor ve aynı yoldan geri okuyor. phpMyAdmin doğru bağlandığı için gerçekte saklananı gösterir. Metin zaten çift kodlanmışsa çift kodlama sayfasına, WordPress sitesiyse WordPress veritabanı sayfasına bakın.

Hangi collation’ı seçmeliyim?

Türkçe içerik için utf8mb4_turkish_ci en uygunudur; genel amaçlı uygulamalarda utf8mb4_unicode_ci de iş görür. Asıl önemli olan karakter setinin utf8mb4 olmasıdır – MySQL’deki utf8 emoji saklayamaz.

MariaDB’de de çalışır mı?

Evet. MariaDB karakter setlerini MySQL gibi yönetir ve komutlar aynıdır.

Yedek dosyası en fazla ne kadar büyük olabilir?

Dosya başına 100 MB’a kadar. Daha büyük veritabanlarını tablo tablo dışa aktarın.

Diğer rehberler