Cara memperbaiki encoding karakter di MySQL dan phpMyAdmin

phpMyAdmin, dump SQL, atau aplikasi Anda menampilkan é atau ? alih-alih é? Biasanya tabel, koneksi, dan impor memakai encoding yang tidak sama. Mojibuster memperbaiki hasil ekspor langsung di browser, lalu Anda atur MySQL dengan benar.

Bisa untuk teks dan file berikut:

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

Misalnya ekspor Excel, dump database, subtitle, atau kode situs web.

Perbaiki

  1. Letakkan file atau tempel teks
  2. Langsung diperbaiki otomatis
  3. Salin atau unduh
atau seret file ke sini
  • Tanpa upload. File Anda diperbaiki langsung di browser dan tidak pernah meninggalkan perangkat Anda.

  • Server di Uni Eropa. Mojibuster berjalan di server di Finlandia (Uni Eropa), sehingga berlaku Peraturan Perlindungan Data Umum (GDPR). Baca GDPR (EUR-Lex, dalam bahasa Inggris)

Tiga tempat MySQL membutuhkan encoding

  • Kolom atau tabel: charset tempat data disimpan, misalnya utf8mb4 atau latin1.
  • Koneksi: charset yang dipakai klien dan server saat berkomunikasi, diatur dengan SET NAMES utf8mb4 atau di pengaturan koneksi.
  • File: encoding untuk membaca impor atau menulis ekspor, di phpMyAdmin pada bagian Set karakter file.

Kalau ketiganya tidak cocok, karakter menjadi rusak. Kasus terbanyak: teks UTF-8 ditulis lewat koneksi latin1 ke kolom latin1. Aplikasi tampak normal, tetapi phpMyAdmin dan hasil ekspor menampilkan é.

Satu baris dari ekspor CSV phpMyAdmin

Sebelum

"1","Café Müller – Jl. Merdeka No. 12","Rp 25.000 ≈ €1,50","Zürich ’24"

Sesudah

"1","Café Müller – Jl. Merdeka No. 12","Rp 25.000 ≈ €1,50","Zürich ’24"

Memeriksa charset

  • SHOW VARIABLES LIKE 'character_set%'; menampilkan pengaturan server dan koneksi.
  • SHOW CREATE TABLE pelanggan; menampilkan charset tabel beserta kolomnya.
  • SELECT nama, HEX(nama) FROM pelanggan LIMIT 5; menampilkan byte aslinya: di kolom utf8mb4, C3A9 adalah é, sedangkan C383C2A9 adalah é yang sudah rusak.

Memperbaiki ekspor atau dump

  1. Ekspor tabel di phpMyAdmin sebagai SQL atau CSV, atau dengan mysqldump --default-character-set=utf8mb4.
  2. Seret file ke kotak di atas. Mojibuster hanya memperbaiki bagian yang rusak; karakter yang sudah benar tidak diubah.
  3. Periksa bagian yang diperbaiki di Apa yang berubah? lalu unduh filenya.
  4. Impor ke tabel utf8mb4 dan pilih utf-8 sebagai set karakter di dialog impor.
  5. Uji dulu pada salinan sebelum mengganti tabel yang asli.

Hasil ekspor tidak pernah keluar dari komputer Anda, penting untuk data pelanggan. Kalau teksnya sudah terenkode dua kali, baca juga à pengganti huruf beraksen.

Mengatasi penyebabnya

  • Buat tabel baru dengan DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci.
  • Atur koneksi aplikasi ke utf8mb4, di PHP misalnya dengan charset=utf8mb4 pada DSN PDO.
  • Kalau byte UTF-8 tersimpan di kolom latin1, jangan langsung ubah dengan CONVERT TO: byte itu akan terenkode untuk kedua kalinya. Jalur aman lewat tipe biner: pertama MODIFY nama VARBINARY(255), lalu MODIFY nama VARCHAR(255) CHARACTER SET utf8mb4.
  • Kalau MySQL mengganti karakter dengan ?, kolom atau koneksi tidak bisa menyimpannya. Data yang sudah tersimpan seperti itu hilang: lihat tanda tanya pengganti huruf.

Pertanyaan yang sering diajukan

Kenapa di aplikasi semuanya normal tetapi di phpMyAdmin tidak?

Karena aplikasi dan database melakukan kesalahan yang sama dua kali: aplikasi menulis UTF-8 lewat koneksi latin1 dan membacanya dengan cara yang sama. phpMyAdmin terhubung dengan benar sehingga menampilkan isi yang sebenarnya. Kalau kesalahannya sudah ada di ekspor WordPress, baca juga WordPress & database dan teks terkodekan ganda.

Collation mana yang sebaiknya dipakai?

utf8mb4_unicode_ci cocok untuk kebanyakan aplikasi; sejak MySQL 8 defaultnya utf8mb4_0900_ai_ci. Charset utf8mb4 lebih penting, bukan utf8, yang di MySQL tidak bisa menyimpan emoji.

Apakah ini juga berlaku untuk MariaDB?

Ya. MariaDB menangani charset seperti MySQL dan perintahnya sama.

Seberapa besar dump yang bisa diproses?

Sampai 100 MB per file. Ekspor database yang lebih besar tabel demi tabel.

Panduan lainnya