Bagaimana saya bisa mengubah seluruh karakter-set basis data MySQL ke UTF-8 dan collation ke UTF-8?
mysql
character-encoding
Dekan
sumber
sumber
utf8_unicode_ci
, bukanutf8_general_ci
.utf8mb4
alih - alihutf8
karenautf8
hanya mendukung bidang multibahasa dasar yang bertentangan dengan jangkauan penuh. Ini membutuhkan MySQL 5.5.3 atau lebih tinggi.utf8mb4
Anda juga harus beralih collation keutf8mb4_unicode_ci
utf8mb4_unicode_520_ci
, atau apa pun versi terbaru yang tersedia.Jawaban:
Gunakan perintah
ALTER DATABASE
danALTER TABLE
.Atau jika Anda masih menggunakan MySQL 5.5.2 atau lebih tua yang tidak mendukung UTF-8 4-byte, gunakan
utf8
sebagai gantiutf8mb4
:sumber
CONVERT TO
Teknik mengasumsikan bahwa teks itu benar disimpan dalam beberapa charset lain (misalnya, latin1), dan tidak hancur (seperti UTF-8 byte berdesakan dalam kolom latin1 tanpa konversi ke latin1).Buat cadangan!
Maka Anda perlu mengatur set karakter default pada database. Ini tidak mengonversi tabel yang ada, itu hanya menetapkan default untuk tabel yang baru dibuat.
Kemudian, Anda perlu mengonversi set char pada semua tabel yang ada dan kolomnya. Ini mengasumsikan bahwa data Anda saat ini sebenarnya di set karakter saat ini. Jika kolom Anda disetel ke satu set karakter tetapi data Anda benar-benar disimpan di set karakter lain, maka Anda perlu memeriksa manual MySQL tentang cara menangani ini.
sumber
utf8_general_ci
praktik terbaik tidak lagi direkomendasikan. Karena MySQL 5.5.3 Anda harus menggunakanutf8mb4
daripadautf8
. Keduanya merujuk pada pengkodean UTF-8, tetapi yang lebih tuautf8
memiliki batasan khusus MySQL yang mencegah penggunaan karakter yang disebutkan di atas0xFFFD
.Di shell commandline
Jika Anda salah satu shell commandline, Anda dapat melakukannya dengan sangat cepat. Cukup isi "dbname": D
Satu-liner untuk salin / tempel sederhana
sumber
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DB="dbname"
DB="db_name"; ( echo 'ALTER DATABASE
'"$ DB"' `SET CHARACTER utf8 COLLATE utf8_general_ci; '; mysql --uuser -ppassword -hhost "$ DB" -e "SHOW TABLES" --batch --skip-column-names | xargs -Saya {} echo 'SET foreign_key_checks = 0; ALTER TABLE'{}'
CONVERT KE CHARACTER SET utf8 COLLATE utf8_general_ci; ' ) | mysql -uuser -ppassword -hhost "$ DB" `Anda dapat membuat sql untuk memperbarui semua tabel dengan:
Tangkap output dan jalankan.
Jawaban Arnold Daniels di atas lebih elegan.
sumber
WHERE TABLE_SCHEMA=webdb_playground
memberi Anda kesalahan kolom yang tidak diketahui tetapiWHERE TABLE_SCHEMA="webdb_playground"
akan berhasil. Sesuatu untuk dicoba seandainya ada orang lain yang menabraknya.Sebelum melanjutkan, pastikan Anda: Telah menyelesaikan cadangan basis data lengkap!
Langkah 1: Perubahan Level Basis Data
Mengidentifikasi set Kumpulan dan Karakter dari basis data Anda
Memperbaiki pemeriksaan untuk basis data
Langkah 2: Perubahan Level Tabel
Mengidentifikasi Tabel Database dengan kumpulan karakter atau susunan yang salah
Menyesuaikan susunan kolom dan set karakter kolom tabel
Tangkap output sql atas dan jalankan. (seperti mengikuti)
lihat: https://confluence.atlassian.com/display/CONFKB/How+to+Fix+the+Collation+and+Character+Set+of+a+MySQL+Database
sumber
Gunakan HeidiSQL . Alat db gratis dan sangat bagus.
Dari menu alat, masukkan editor tabel Massal
Pilih database lengkap atau pilih tabel untuk dikonversi,
Menjalankan
Ini mengkonversi database lengkap dari latin ke utf8 hanya dalam beberapa detik.
Bekerja seperti pesona :)
HeidiSQL terhubung secara default sebagai utf8 sehingga setiap karakter khusus sekarang harus dilihat sebagai karakter (æ ø å) dan tidak dikodekan saat memeriksa data tabel.
Perangkap nyata ketika pindah dari bahasa latin ke utf8 adalah untuk memastikan pdo terhubung dengan utf8 charset. Jika tidak, Anda akan mendapatkan data sampah yang disisipkan ke tabel utf8 dan tanda tanya di semua tempat di halaman web Anda, membuat Anda berpikir bahwa data tabel tidak utf8 ...
sumber
Terinspirasi oleh @sdfor komentar, di sini adalah skrip bash yang melakukan pekerjaan
sumber
Jika data tidak dalam rangkaian karakter yang sama Anda dapat mempertimbangkan cuplikan ini dari http://dev.mysql.com/doc/refman/5.0/en/charset-conversion.html
Berikut ini sebuah contoh:
Pastikan untuk memilih susunan yang tepat, atau Anda mungkin mendapatkan konflik kunci yang unik. misalnya Éleanore dan Eleanore mungkin dianggap sama di beberapa pemeriksaan.
Ke samping:
Saya memiliki situasi di mana karakter tertentu "pecah" di email meskipun mereka disimpan sebagai UTF-8 dalam database. Jika Anda mengirim email menggunakan data utf8, Anda mungkin ingin juga mengonversi email Anda untuk dikirim dalam UTF8.
Di PHPMailer, perbarui saja baris ini:
public $CharSet = 'utf-8';
sumber
Untuk database yang memiliki banyak tabel, Anda dapat menggunakan skrip php sederhana untuk memperbarui charset database dan semua tabel menggunakan yang berikut ini:
sumber
sumber
sumber
Cara teraman adalah memodifikasi kolom pertama menjadi tipe biner dan kemudian memodifikasinya kembali ke tipe itu menggunakan charset yang diinginkan.
Setiap jenis kolom memiliki jenis biner masing-masing, sebagai berikut:
Misalnya.:
Saya mencoba beberapa tabel latin1 dan menyimpan semua diakritik.
Anda dapat mengekstrak kueri ini untuk semua kolom yang melakukan ini:
Setelah Anda melakukan ini pada semua kolom Anda maka Anda melakukannya pada semua tabel:
Untuk menghasilkan kueri ini untuk semua tabel Anda, gunakan kueri berikut:
Dan sekarang setelah Anda memodifikasi semua kolom dan tabel Anda, lakukan hal yang sama pada database:
sumber
Jika Anda tidak dapat mengubah tabel atau tabel Anda selalu disetel ke set karakter non-utf8, tetapi Anda ingin utf8, taruhan terbaik Anda adalah menghapusnya dan memulai lagi dan memulai lagi secara eksplisit:
sumber
Satu-satunya solusi yang bekerja untuk saya: http://docs.moodle.org/23/en/Converting_your_MySQL_database_to_UTF8
Mengonversi database yang berisi tabel
sumber
ubah table table_name charset = 'utf8';
Ini adalah permintaan sederhana yang dapat saya gunakan untuk kasus saya, Anda dapat mengubah nama_tabel sesuai kebutuhan Anda.
sumber
Untuk mengubah pengkodean set karakter ke UTF-8 untuk database itu sendiri, ketik perintah berikut di prompt mysql>. Ganti DBNAME dengan nama basis data:
sumber
Anda juga dapat alat DB Navicat, yang lebih mudah melakukannya.
Klik kanan Database Anda & pilih DB Properties & Change seperti yang Anda inginkan di Drop Down
sumber
Solusi Baris Perintah dan Kecualikan Tampilan
Saya hanya mengisi jawaban @ Jasny untuk orang lain seperti
@Brian
dan saya yang memiliki pandangan di database kami.Jika Anda memiliki kesalahan seperti ini:
Itu karena Anda mungkin memiliki pandangan dan Anda harus mengecualikannya. Tetapi ketika mencoba untuk mengecualikan mereka, MySQL mengembalikan 2 kolom, bukan 1.
Jadi kita harus menyesuaikan perintah Jasny dengan
awk
mengekstraksi hanya kolom 1 yang berisi nama tabel.Satu-liner untuk salin / tempel sederhana
sumber
Untuk mengubah pengkodean set karakter ke UTF-8 ikuti langkah-langkah sederhana di PHPMyAdmin
Pilih Database Anda
Pergi ke Operasi
sumber