Ada 3 kasus berbeda untuk dipertimbangkan:
Nilainya memang dikodekan menggunakan Latin1
Ini adalah kasus yang konsisten:charset yang dideklarasikan dan penyandian konten cocok. Ini adalah satu-satunya kasus yang saya bahas dalam jawaban awal saya.
Gunakan perintah yang Anda sarankan:
ALTER TABLE tablename CONVERT TO CHARSET utf8 COLLATE utf8_bin
Perhatikan bahwa CONVERT TO CHARACTER SET
perintah hanya muncul di MySQL 4.1.2, jadi siapa pun yang menggunakan database yang diinstal sebelum tahun 2005 harus menggunakan trik ekspor/impor. Inilah sebabnya mengapa ada begitu banyak skrip dan dokumen lama di Internet yang melakukannya dengan cara lama.
Nilai sudah dikodekan menggunakan utf8
Dalam hal ini, Anda tidak ingin mysql mengonversi data apa pun, Anda hanya perlu mengubah metadata kolom.
Untuk ini, Anda harus mengubah jenisnya menjadi BLOB terlebih dahulu, lalu menjadi TEXT utf8 untuk setiap kolom, sehingga tidak ada konversi nilai:
ALTER TABLE t1 CHANGE c1 c1 BLOB;
ALTER TABLE t1 CHANGE c1 c1 TEXT CHARACTER SET utf8
Ini adalah cara yang disarankan, dan didokumentasikan secara eksplisit di Alter Dokumentasi Sintaks Tabel .
Nilai yang digunakan dalam pengkodean yang berbeda
Pengkodean default adalah Latin1 selama beberapa tahun pada beberapa distribusi Linux. Dalam hal ini, Anda harus menggunakan kombinasi dari dua teknik:
- Perbaiki tabel meta-data, menggunakan trik tipe BLOB
- Konversi nilai menggunakan
CONVERT TO
.