Ada MySQL table
yang definisi ini diambil dari SQLYog Enterprise
:
Table Create Table
----------------- ---------------------------------------------------------
etape_prospection CREATE TABLE `etape_prospection` (
`etape_prosp_id` int(10) NOT NULL AUTO_INCREMENT,
`type_prosp_id` int(10) NOT NULL DEFAULT '0',
`prosp_id` int(10) NOT NULL DEFAULT '0',
`etape_prosp_date` datetime DEFAULT NULL,
`etape_prosp_comment` text,
PRIMARY KEY (`etape_prosp_id`),
KEY `concerne_fk` (`prosp_id`),
KEY `de_type_fk` (`type_prosp_id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1
Saya ingin mengubah default charset
tabel ini dari latin1
menjadi utf8
. Bagaimana cara melakukannya ?
Jawaban:
Jika Anda ingin mengubah tabel
default character set
dan semua kolom karakter menjadi kumpulan karakter baru, gunakan pernyataan seperti ini:ALTER TABLE tbl_name CONVERT TO CHARACTER SET charset_name;
Jadi kueri akan menjadi:
ALTER TABLE etape_prospection CONVERT TO CHARACTER SET utf8;
sumber
ALTER TABLE tbl CHARACTER SET utf8
sintaks seperti yang disarankan oleh orang lain, Anda hanya akan mengubah pengkodean default untuk tabel; kolom yang ada tidak akan dikonversi seperti jika Anda menggunakan jawaban ini.SELECT concat('alter table ', table_name, ' CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;') FROM information_schema.tables WHERE table_schema='<your_database_name>' and table_collation != 'utf8_general_ci' GROUP BY table_name;
ALTER TABLE tbl CHARACTER SET utf8
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Ubah kumpulan karakter default tabel:
ALTER TABLE etape_prospection CHARACTER SET utf8, COLLATE utf8_general_ci;
Untuk mengubah charset kolom string, lakukan kueri ini:
ALTER TABLE etape_prospection CHANGE COLUMN etape_prosp_comment etape_prosp_comment TEXT CHARACTER SET utf8 COLLATE utf8_general_ci;
sumber
The
ALTER TABLE
perintah MySQL harus melakukan trik. Perintah berikut akan mengubah kumpulan karakter default dari tabel Anda dan kumpulan karakter dari semua kolomnya menjadi UTF8.ALTER TABLE etape_prospection CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
Perintah ini akan mengubah semua kolom seperti teks di tabel menjadi kumpulan karakter baru. Kumpulan karakter menggunakan jumlah data yang berbeda per karakter, jadi MySQL akan mengonversi jenis beberapa kolom untuk memastikan ada cukup ruang untuk memuat jumlah karakter yang sama dengan jenis kolom lama.
Saya sarankan Anda membaca dokumentasi ALTER TABLE MySQL sebelum mengubah data langsung apa pun.
sumber
Jika seseorang mencari solusi lengkap untuk mengubah charset default untuk semua tabel database dan mengonversi data, ini bisa jadi salah satunya:
DELIMITER $$ CREATE PROCEDURE `exec_query`(IN sql_text VARCHAR(255)) BEGIN SET @tquery = `sql_text`; PREPARE `stmt` FROM @tquery; EXECUTE `stmt`; DEALLOCATE PREPARE `stmt`; END$$ CREATE PROCEDURE `change_character_set`(IN `charset` VARCHAR(64), IN `collation` VARCHAR(64)) BEGIN DECLARE `done` BOOLEAN DEFAULT FALSE; DECLARE `tab_name` VARCHAR(64); DECLARE `charset_cursor` CURSOR FOR SELECT `table_name` FROM `information_schema`.`tables` WHERE `table_schema` = DATABASE() AND `table_type` = 'BASE TABLE'; DECLARE CONTINUE HANDLER FOR NOT FOUND SET `done` = TRUE; SET foreign_key_checks = 0; OPEN `charset_cursor`; `change_loop`: LOOP FETCH `charset_cursor` INTO `tab_name`; IF `done` THEN LEAVE `change_loop`; END IF; CALL `exec_query`(CONCAT( 'ALTER TABLE `', tab_name, '` CONVERT TO CHARACTER SET ', QUOTE(charset), ' COLLATE ', QUOTE(collation), ';' )); CALL `exec_query`(CONCAT('REPAIR TABLE `', tab_name, '`;')); CALL `exec_query`(CONCAT('OPTIMIZE TABLE `', tab_name, '`;')); END LOOP `change_loop`; CLOSE `charset_cursor`; SET foreign_key_checks = 1; END$$ DELIMITER ;
Anda dapat menempatkan kode ini di dalam file misalnya
chg_char_set.sql
dan menjalankannya misalnya dengan memanggilnya dari terminal MySQL:Kemudian panggil prosedur yang ditentukan dengan parameter input yang diinginkan misalnya
CALL change_character_set('utf8mb4', 'utf8mb4_bin');
Setelah Anda menguji hasilnya, Anda dapat membatalkan prosedur yang disimpan tersebut:
DROP PROCEDURE `change_character_set`; DROP PROCEDURE `exec_query`;
sumber
Anda dapat mengubah default dengan
alter table set default charset
tetapi itu tidak akan mengubah kumpulan karakter dari kolom yang ada. Untuk mengubahnya, Anda perlu menggunakan filealter table modify column
.Mengubah kumpulan karakter kolom hanya berarti dapat menyimpan karakter yang lebih luas. Aplikasi Anda berbicara ke db menggunakan klien mysql sehingga Anda mungkin perlu mengubah pengkodean klien juga.
sumber