Istnieje MySQL, table
którego definicja pochodzi z 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
Chcę zmienić default charset
tę tabelę z latin1
na utf8
. Jak to zrobić ?
Odpowiedzi:
Jeśli chcesz zmienić tabelę
default character set
i wszystkie kolumny znaków na nowy zestaw znaków, użyj poniższej instrukcji:ALTER TABLE tbl_name CONVERT TO CHARACTER SET charset_name;
Więc zapytanie będzie wyglądać następująco:
ALTER TABLE etape_prospection CONVERT TO CHARACTER SET utf8;
źródło
ALTER TABLE tbl CHARACTER SET utf8
składni zgodnie z sugestiami innych, zmienisz tylko domyślne kodowanie tabeli; istniejące kolumny nie zostaną przekonwertowane, tak jak będzie, jeśli użyjesz tej odpowiedzi.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;
Zmień domyślny zestaw znaków tabeli:
ALTER TABLE etape_prospection CHARACTER SET utf8, COLLATE utf8_general_ci;
Aby zmienić zestaw znaków w kolumnie łańcuchowej, wykonaj następujące zapytanie:
ALTER TABLE etape_prospection CHANGE COLUMN etape_prosp_comment etape_prosp_comment TEXT CHARACTER SET utf8 COLLATE utf8_general_ci;
źródło
Polecenie
ALTER TABLE
MySQL powinno załatwić sprawę. Następujące polecenie zmieni domyślny zestaw znaków tabeli i zestaw znaków wszystkich jej kolumn na UTF8.ALTER TABLE etape_prospection CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
To polecenie skonwertuje wszystkie kolumny tekstowe w tabeli na nowy zestaw znaków. Zestawy znaków używają różnych ilości danych na znak, więc MySQL przekonwertuje typ niektórych kolumn, aby zapewnić wystarczającą ilość miejsca, aby zmieścić taką samą liczbę znaków jak stary typ kolumny.
Zalecam przeczytanie dokumentacji ALTER TABLE MySQL przed modyfikacją jakichkolwiek danych na żywo.
źródło
Jeśli ktoś szuka kompletnego rozwiązania do zmiany domyślnego zestawu znaków dla wszystkich tabel bazy danych i konwersji danych, może to być jedno:
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 ;
Możesz umieścić ten kod w pliku np.
chg_char_set.sql
I wykonać go np. Wywołując go z terminala MySQL:Następnie wywołaj zdefiniowaną procedurę z żądanymi parametrami wejściowymi, np
CALL change_character_set('utf8mb4', 'utf8mb4_bin');
Po przetestowaniu wyników możesz usunąć te procedury składowane:
DROP PROCEDURE `change_character_set`; DROP PROCEDURE `exec_query`;
źródło
Możesz zmienić wartość domyślną za pomocą znaku,
alter table set default charset
ale to nie zmieni zestawu znaków w istniejących kolumnach. Aby to zmienić, musisz użyć plikualter table modify column
.Zmiana zestawu znaków kolumny oznacza tylko, że będzie ona mogła przechowywać szerszy zakres znaków. Twoja aplikacja komunikuje się z bazą danych za pomocą klienta mysql, więc może zajść potrzeba zmiany kodowania klienta.
źródło