Bagaimana cara mengubah seluruh rangkaian dan susunan basis data MySQL ke UTF-8?

459

Bagaimana saya bisa mengubah seluruh karakter-set basis data MySQL ke UTF-8 dan collation ke UTF-8?

Dekan
sumber
22
Untuk pengunjung selanjutnya: Catat pertanyaan terkait di bilah sisi dan gunakan utf8_unicode_ci, bukan utf8_general_ci.
fuxia
14
Jika Anda ingin dukungan penuh UTF-8, Anda mungkin juga ingin menggunakan rangkaian karakter utf8mb4alih - alih utf8karena utf8hanya mendukung bidang multibahasa dasar yang bertentangan dengan jangkauan penuh. Ini membutuhkan MySQL 5.5.3 atau lebih tinggi.
Martin Steel
4
Saya lupa menyebutkan dalam komentar saya di atas, jika Anda beralih ke utf8mb4Anda juga harus beralih collation keutf8mb4_unicode_ci
Martin Steel
3
Bahkan lebih baik, susun utf8mb4_unicode_520_ci, atau apa pun versi terbaru yang tersedia.
Rick James
@ MartinSteel Saya percaya bahwa pemeriksaan secara default dengan set karakter itu.
VaTo

Jawaban:

715

Gunakan perintah ALTER DATABASEdan ALTER TABLE.

ALTER DATABASE databasename CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Atau jika Anda masih menggunakan MySQL 5.5.2 atau lebih tua yang tidak mendukung UTF-8 4-byte, gunakan utf8sebagai ganti utf8mb4:

ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
BalusC
sumber
12
The CONVERT TOTeknik 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).
Rick James
1
Ini membangun kembali tabel sehingga tidak layak untuk sistem produksi besar. Jika yakin bahwa hanya ASCII chars yang disimpan di kolom latin1, apakah mungkin untuk mengubah charset / collation tabel tanpa membangun kembali?
Andrew
@Andrew Sistem produksi besar biasanya memiliki DB cermin untuk pemeliharaan.
BalusC
1
mengubah charcter set ke utf8 mengubah datatype saya dari teks ke mediumtext. Apakah itu diharapkan?
Jerry
1
@ Jerry Mungkin, karena: "Jika kolom dikonversi ke utf8, setiap karakter mungkin memerlukan hingga tiga byte, untuk panjang maksimum yang mungkin 3 × 65.535 = 196.605 byte. Panjang itu tidak cocok dengan byte panjang kolom TEXT, jadi MySQL mengonversi tipe data menjadi MEDIUMTEXT, yang merupakan tipe string terkecil yang byte panjangnya dapat mencatat nilai 196.605. Demikian pula, kolom VARCHAR dapat dikonversi ke MEDIUMTEXT. " Mengubah Set Karakter
jabbascript
129
  1. Buat cadangan!

  2. Maka Anda perlu mengatur set karakter default pada database. Ini tidak mengonversi tabel yang ada, itu hanya menetapkan default untuk tabel yang baru dibuat.

    ALTER DATABASE dbname CHARACTER SET utf8 COLLATE utf8_general_ci;
  3. 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.

    ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
koran
sumber
44
Catatan: tablename ALTER TABLE CHARACTER SET utf8 hanya menetapkan karakter default pada tabel yang digunakan untuk kolom yang baru dibuat. Itu tidak mengonversi kolom yang ada yang sudah memiliki set kumpulan char.
Koran
Seharusnya saya membaca cadangan cadangan cadangan pertama ... tapi keberuntungan saya adalah bahwa itu ada di lingkungan pengembangan. jadi upvote saya pergi ke Anda!
DominikAngerer
4
@DominikAngerer: Apa yang rusak?
cic
16
Perhatikan bahwa utf8_general_cipraktik terbaik tidak lagi direkomendasikan. Karena MySQL 5.5.3 Anda harus menggunakan utf8mb4daripada utf8. Keduanya merujuk pada pengkodean UTF-8, tetapi yang lebih tua utf8memiliki batasan khusus MySQL yang mencegah penggunaan karakter yang disebutkan di atas 0xFFFD.
u01jmg3
76

Di shell commandline

Jika Anda salah satu shell commandline, Anda dapat melakukannya dengan sangat cepat. Cukup isi "dbname": D

DB="dbname"
(
    echo 'ALTER DATABASE `'"$DB"'` CHARACTER SET utf8 COLLATE utf8_general_ci;'
    mysql "$DB" -e "SHOW TABLES" --batch --skip-column-names \
    | xargs -I{} echo 'ALTER TABLE `'{}'` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;'
) \
| mysql "$DB"

Satu-liner untuk salin / tempel sederhana

DB="dbname"; ( echo 'ALTER DATABASE `'"$DB"'` CHARACTER SET utf8 COLLATE utf8_general_ci;'; mysql "$DB" -e "SHOW TABLES" --batch --skip-column-names | xargs -I{} echo 'ALTER TABLE `'{}'` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;' ) | mysql "$DB"
Arnold Daniels
sumber
2
Dapatkah Anda memberikan lebih banyak detail dalam hal ini yang saya dapatERROR 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"
steros
@ 4485670 Anda harus menjalankan ini pada shell baris perintah . Jika Anda hanya memiliki koneksi klien MySQL yang tersedia, gunakan kode sdfor di bawah ini.
Arnold Daniels
6
Kode ini berfungsi dengan baik, hanya perlu menambahkan -h [nama host] -u [nama pengguna] -p [kata sandi] setelah mysql sebagaimana diperlukan.
bubar
3
Anda mungkin ingin menonaktifkan pemeriksaan kunci asing pada sistem nyata: 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" `
Adam Nelson
1
Tidak bekerja untuk saya hingga saya menggunakan "tampilkan tabel lengkap tempat Table_Type = 'BASE TABLE'" sebagai ganti "SHOW TABLES"
Brian Peterson
68

Anda dapat membuat sql untuk memperbarui semua tabel dengan:

SELECT CONCAT("ALTER TABLE ",TABLE_SCHEMA,".",TABLE_NAME," CHARACTER SET utf8 COLLATE utf8_general_ci;   ",
    "ALTER TABLE ",TABLE_SCHEMA,".",TABLE_NAME," CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;  ") 
    AS alter_sql
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = your_database_name;

Tangkap output dan jalankan.

Jawaban Arnold Daniels di atas lebih elegan.

sdfor
sumber
mengapa Anda menambahkan dua permintaan perubahan tabel? satu tidak cukup?
Akshay
7
@ Ahshay, pertanyaan bagus. Kueri alter-tabel pertama menetapkan default untuk kolom baru, dan kueri alter-tabel kedua mengonversi kolom yang ada.
UnlimitedInfinity
4
FYI: menurut dev.mysql.com/doc/refman/5.5/en/alter-table.html dokumentasi MySQL, versi "CONVERT TO CHARACTER SET" dari pernyataan ALTER melakukan keduanya dalam satu langkah: "Untuk mengubah standar tabel set karakter dan semua kolom karakter (CHAR, VARCHAR, TEXT) ke set karakter baru ...
devGuy
2
Saya memiliki kesalahan ini # 1054 - Kolom tidak dikenal 'webdb_playground' di 'di mana klausa' tapi saya yakin db saya adalah yang benar
Yannis Dran
1
@YannisDran Nama db Anda mungkin tidak ada dalam string, sehingga WHERE TABLE_SCHEMA=webdb_playgroundmemberi Anda kesalahan kolom yang tidak diketahui tetapi WHERE TABLE_SCHEMA="webdb_playground"akan berhasil. Sesuatu untuk dicoba seandainya ada orang lain yang menabraknya.
jabbascript
17

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

    SELECT DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME FROM 
    information_schema.SCHEMATA S
    WHERE schema_name = 'your_database_name'
    AND
    (DEFAULT_CHARACTER_SET_NAME != 'utf8'
        OR
     DEFAULT_COLLATION_NAME not like 'utf8%');
  • Memperbaiki pemeriksaan untuk basis data

    ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Langkah 2: Perubahan Level Tabel

  • Mengidentifikasi Tabel Database dengan kumpulan karakter atau susunan yang salah

    SELECT CONCAT(
    'ALTER TABLE ',  table_name, ' CHARACTER SET utf8 COLLATE utf8_general_ci;  ', 
    'ALTER TABLE ',  table_name, ' CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;  ')
    FROM information_schema.TABLES AS T, information_schema.`COLLATION_CHARACTER_SET_APPLICABILITY` AS C
    WHERE C.collation_name = T.table_collation
    AND T.table_schema = 'your_database_name'
    AND
    (C.CHARACTER_SET_NAME != 'utf8'
        OR
     C.COLLATION_NAME not like 'utf8%')
  • Menyesuaikan susunan kolom dan set karakter kolom tabel

Tangkap output sql atas dan jalankan. (seperti mengikuti)

ALTER TABLE rma CHARACTER SET utf8 COLLATE utf8_general_ci;ALTER TABLE rma CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;  
ALTER TABLE rma_history CHARACTER SET utf8 COLLATE utf8_general_ci;ALTER TABLE rma_history CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;  
ALTER TABLE rma_products CHARACTER SET utf8 COLLATE utf8_general_ci;ALTER TABLE rma_products CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;  
ALTER TABLE rma_report_period CHARACTER SET utf8 COLLATE utf8_general_ci;ALTER TABLE rma_report_period CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;  
ALTER TABLE rma_reservation CHARACTER SET utf8 COLLATE utf8_general_ci;ALTER TABLE rma_reservation CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;  
ALTER TABLE rma_supplier_return CHARACTER SET utf8 COLLATE utf8_general_ci;ALTER TABLE rma_supplier_return CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;  
ALTER TABLE rma_supplier_return_history CHARACTER SET utf8 COLLATE utf8_general_ci;ALTER TABLE rma_supplier_return_history CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;  
ALTER TABLE rma_supplier_return_product CHARACTER SET utf8 COLLATE utf8_general_ci;ALTER TABLE rma_supplier_return_product CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; 

lihat: https://confluence.atlassian.com/display/CONFKB/How+to+Fix+the+Collation+and+Character+Set+of+a+MySQL+Database

John Yin
sumber
1
Saat ini skrip ini menggunakan 'utf8_unicode_ci' untuk db tetapi 'utf8_general_ci' untuk tabel - apakah disengaja? (Saya pikir keduanya harus menggunakan charset yang sama)
gmcnaughton
stackoverflow.com/questions/10957238/… telah meninggalkan jawaban yang lebih lengkap di sini
VH
8

Gunakan HeidiSQL . Alat db gratis dan sangat bagus.

Dari menu alat, masukkan editor tabel Massal

Pilih database lengkap atau pilih tabel untuk dikonversi,

  • centang Ubah susunan default: utf8mb4_general_ci
  • centang Konversi ke charset: utf8

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 ...

Tom
sumber
Bisakah Anda menguraikannya? Saya memiliki masalah ini - karakter dan spasi khusus muncul sebagai tanda tanya. Saya mencoba mengonversi basis data dalam MAMP menggunakan PHPMyAdmin. Setelah dikembangkan secara offline saya sekarang menemukan bahwa host saya tidak mendukung utf8mb4. Saya tidak punya Windows jadi tidak bisa menggunakan HeidiSQL. Apakah ada cara saya bisa mencapai ini dengan PHPMyAdmin?
RexTheRunt
seperti ini. terutama Anda punya banyak meja.
tyan
Saya mendapatkan dan kesalahan ketika mencoba untuk mengubah CHARSET: SQL Error (1025): Kesalahan saat mengubah nama ... tapi ini adalah alat manajer SQL yang luar biasa!
marcolopes
Jika ada yang membutuhkan ikhtisar dan tutorial yang baik untuk heidisql, lihat artikel ini .
DougB
6

Terinspirasi oleh @sdfor komentar, di sini adalah skrip bash yang melakukan pekerjaan

#!/bin/bash

printf "### Converting MySQL character set ###\n\n"

printf "Enter the encoding you want to set: "
read -r CHARSET

# Get the MySQL username
printf "Enter mysql username: "
read -r USERNAME

# Get the MySQL password
printf "Enter mysql password for user %s:" "$USERNAME"
read -rs PASSWORD

DBLIST=( mydatabase1 mydatabase2 )

printf "\n"


for DB in "${DBLIST[@]}"
do
(
    echo 'ALTER DATABASE `'"$DB"'` CHARACTER SET utf8 COLLATE `'"$CHARSET"'`;'
    mysql "$DB" -u"$USERNAME" -p"$PASSWORD" -e "SHOW TABLES" --batch --skip-column-names \
    | xargs -I{} echo 'ALTER TABLE `'{}'` CONVERT TO CHARACTER SET utf8 COLLATE `'"$CHARSET"'`;'
) \
| mysql "$DB" -u"$USERNAME" -p"$PASSWORD"

echo "$DB database done..."
done

echo "### DONE ###"
exit
Camoflame
sumber
4

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

Jika kolom memiliki tipe data non-biner (CHAR, VARCHAR, TEXT), isinya harus dikodekan dalam set karakter kolom, bukan set karakter lainnya. Jika konten dikodekan dalam set karakter yang berbeda, Anda dapat mengonversi kolom untuk menggunakan tipe data biner terlebih dahulu, dan kemudian ke kolom non-biner dengan set karakter yang diinginkan.

Berikut ini sebuah contoh:

 ALTER TABLE t1 CHANGE c1 c1 BLOB;
 ALTER TABLE t1 CHANGE c1 c1 VARCHAR(100) CHARACTER SET utf8;

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';

Frank Forte
sumber
4

Untuk database yang memiliki banyak tabel, Anda dapat menggunakan skrip php sederhana untuk memperbarui charset database dan semua tabel menggunakan yang berikut ini:

$conn = mysqli_connect($host, $username, $password, $database);

if ($conn->connect_error) {
  die("Connection failed: " . $conn->connect_error);
}

$alter_database_charset_sql = "ALTER DATABASE ".$database." CHARACTER SET utf8 COLLATE utf8_unicode_ci";
mysqli_query($conn, $alter_database_charset_sql);

$show_tables_result = mysqli_query($conn, "SHOW TABLES");
$tables  = mysqli_fetch_all($show_tables_result);

foreach ($tables as $index => $table) {
  $alter_table_sql = "ALTER TABLE ".$table[0]." CONVERT TO CHARACTER SET utf8  COLLATE utf8_unicode_ci";
  $alter_table_result = mysqli_query($conn, $alter_table_sql);
  echo "<pre>";
  var_dump($alter_table_result);
  echo "</pre>";
}
Dan Lucas
sumber
Dari mana kita menjalankan skrip ini?
Yannis Dran
1
@YannisDran Seharusnya tidak masalah, selama IP yang Anda jalankan memiliki akses ke database. Pastikan Anda mengambil cadangan terlebih dahulu!
Dan Lucas
Bagus, dan bagaimana kita menjalankannya? Apakah kita harus mengunggahnya di server dan kemudian jalankan masukkan jalan ke posisinya?
Yannis Dran
4
DELIMITER $$  

CREATE PROCEDURE `databasename`.`update_char_set`()  

BEGIN  
 DECLARE done INT DEFAULT 0;  
 DECLARE t_sql VARCHAR(256);  
 DECLARE tableName VARCHAR(128);  
 DECLARE lists CURSOR FOR SELECT table_name FROM `information_schema`.`TABLES` WHERE table_schema = 'databasename';  
 DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;  
 OPEN lists;  
 FETCH lists INTO tableName;  
 REPEAT  
    SET @t_sql = CONCAT('ALTER TABLE ', tableName, ' CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci');  
    PREPARE stmt FROM @t_sql;  
    EXECUTE stmt;  
    DEALLOCATE PREPARE stmt;  
 FETCH lists INTO tableName;  
 UNTIL done END REPEAT;  
 CLOSE lists;  
END$$  

DELIMITER ;  

CALL databasename.update_char_set();
剑 二十 三
sumber
Terima kasih, ini adalah salah satu dari sedikit jawaban yang benar-benar menunjukkan cara melakukannya ke seluruh database (yaitu setiap tabel). Bekerja seperti pesona.
Machisuji
3
mysqldump -uusername -ppassword -c -e --default-character-set=utf8 --single-transaction --skip-set-charset --add-drop-database -B dbname > dump.sql
cp dump.sql dump-fixed.sql
vim dump-fixed.sql


:%s/DEFAULT CHARACTER SET latin1/DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci/
:%s/DEFAULT CHARSET=latin1/DEFAULT CHARSET=utf8/
:wq

mysql -uusername -ppassword < dump-fixed.sql
Soumik Guha
sumber
3

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:

  1. CHAR => BINARY
  2. TEXT => BLOB
  3. TINYTEXT => TINYBLOB
  4. MEDIUMTEXT => MEDIUMBLOB
  5. LONGTEXT => LONGBLOB
  6. VARCHAR => VARBINARY

Misalnya.:

ALTER TABLE [TABLE_SCHEMA].[TABLE_NAME] MODIFY [COLUMN_NAME] VARBINARY;

ALTER TABLE [TABLE_SCHEMA].[TABLE_NAME] MODIFY [COLUMN_NAME] VARCHAR(140) CHARACTER SET utf8mb4;

Saya mencoba beberapa tabel latin1 dan menyimpan semua diakritik.

Anda dapat mengekstrak kueri ini untuk semua kolom yang melakukan ini:

SELECT
CONCAT('ALTER TABLE ', TABLE_SCHEMA,'.', TABLE_NAME,' MODIFY ', COLUMN_NAME,' VARBINARY;'),
CONCAT('ALTER TABLE ', TABLE_SCHEMA,'.', TABLE_NAME,' MODIFY ', COLUMN_NAME,' ', COLUMN_TYPE,' CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;')
FROM information_schema.columns
WHERE TABLE_SCHEMA IN ('[TABLE_SCHEMA]')
AND COLUMN_TYPE LIKE 'varchar%'
AND (COLLATION_NAME IS NOT NULL AND COLLATION_NAME NOT LIKE 'utf%');

Setelah Anda melakukan ini pada semua kolom Anda maka Anda melakukannya pada semua tabel:

ALTER TABLE [TABLE_SCHEMA].[TABLE_NAME] CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

Untuk menghasilkan kueri ini untuk semua tabel Anda, gunakan kueri berikut:

SELECT
CONCAT('ALTER TABLE ', TABLE_SCHEMA, '.', TABLE_NAME, ' CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;')
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_COLLATION NOT LIKE 'utf8%'
and TABLE_SCHEMA in ('[TABLE_SCHEMA]');

Dan sekarang setelah Anda memodifikasi semua kolom dan tabel Anda, lakukan hal yang sama pada database:

ALTER DATABASE [DATA_BASE_NAME] CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci;
MalachiteBR
sumber
1

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:

create database database_name character set utf8;
pengguna3013048
sumber
0

Satu-satunya solusi yang bekerja untuk saya: http://docs.moodle.org/23/en/Converting_your_MySQL_database_to_UTF8

Mengonversi database yang berisi tabel

mysqldump -uusername -ppassword -c -e --default-character-set=utf8 --single-transaction --skip-set-charset --add-drop-database -B dbname > dump.sql

cp dump.sql dump-fixed.sql
vim dump-fixed.sql

:%s/DEFAULT CHARACTER SET latin1/DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci/
:%s/DEFAULT CHARSET=latin1/DEFAULT CHARSET=utf8/
:wq

mysql -uusername -ppassword < dump-fixed.sql
utapyngo
sumber
0

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.

Aditya Seth
sumber
Biasanya jawaban harus disertai dengan penjelasan tentang apa yang Anda sarankan lakukan.
RiggsFolly
0

Untuk mengubah pengkodean set karakter ke UTF-8 untuk database itu sendiri, ketik perintah berikut di prompt mysql>. Ganti DBNAME dengan nama basis data:

ALTER DATABASE DBNAME CHARACTER SET utf8 COLLATE utf8_general_ci;
Nyein Aung
sumber
0

Anda juga dapat alat DB Navicat, yang lebih mudah melakukannya.

  • Siva.

Klik kanan Database Anda & pilih DB Properties & Change seperti yang Anda inginkan di Drop Down

masukkan deskripsi gambar di sini

rvsiva17
sumber
0

Solusi Baris Perintah dan Kecualikan Tampilan

Saya hanya mengisi jawaban @ Jasny untuk orang lain seperti @Briandan saya yang memiliki pandangan di database kami.

Jika Anda memiliki kesalahan seperti ini:

ERROR 1347 (HY000) at line 17: 'dbname.table_name' is not of type 'BASE TABLE'

Itu karena Anda mungkin memiliki pandangan dan Anda harus mengecualikannya. Tetapi ketika mencoba untuk mengecualikan mereka, MySQL mengembalikan 2 kolom, bukan 1.

SHOW FULL TABLES WHERE Table_Type = 'BASE TABLE';
-- table_name1  BASE TABLE
-- table_name2  BASE TABLE

Jadi kita harus menyesuaikan perintah Jasny dengan awkmengekstraksi hanya kolom 1 yang berisi nama tabel.

DB="dbname"
(
    echo 'ALTER DATABASE `'"$DB"'` CHARACTER SET utf8 COLLATE utf8_general_ci;'
    mysql "$DB" -e "SHOW FULL TABLES WHERE Table_Type = 'BASE TABLE'" --batch --skip-column-names \
    | awk '{print $1 }' \
    | xargs -I{} echo 'ALTER TABLE `'{}'` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;'
) \
| mysql "$DB"

Satu-liner untuk salin / tempel sederhana

DB="dbname"; ( echo 'ALTER DATABASE `'"$DB"'` CHARACTER SET utf8 COLLATE utf8_general_ci;'; mysql "$DB" -e "SHOW FULL TABLES WHERE Table_Type = 'BASE TABLE'" --batch --skip-column-names | awk '{print $1 }' | xargs -I{} echo 'ALTER TABLE `'{}'` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;' ) | mysql "$DB"
Natsimhan
sumber
-1

Untuk mengubah pengkodean set karakter ke UTF-8 ikuti langkah-langkah sederhana di PHPMyAdmin

  1. Pilih Database Anda SS

  2. Pergi ke Operasi SS

  3. Di tab operasi, pada menu turun kolasi bawah, pilih yang Anda inginkan yaitu pengkodean (utf8_general_ci), dan centang kotak centang (1) ubah semua susunan tabel, (2) Ubah semua susunan kolom tabel. dan tekan Go.

SS

menginjak khuram
sumber