Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Apakah ini cara aman untuk mengonversi tabel MySQL dari latin1 ke utf-8?

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 .


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. kembalikan hitungan 0 dengan grup mysql dengan

  2. SQL Query Untuk Menghapus Tabel Di MySQL

  3. mysql pilih int sebagai mata uang atau konversi int ke format mata uang?

  4. Biner MySQL vs kumpulan karakter char biner

  5. Python, Brew, dan MySQLdb