Есть MySQL table
, определение которой взято из 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
Я хочу изменить default charset
эту таблицу с latin1
на utf8
. Как это сделать ?
Ответы:
Если вы хотите изменить таблицу
default character set
и все символьные столбцы на новый набор символов, используйте такую инструкцию:ALTER TABLE tbl_name CONVERT TO CHARACTER SET charset_name;
Итак, запрос будет:
ALTER TABLE etape_prospection CONVERT TO CHARACTER SET utf8;
источник
ALTER TABLE tbl CHARACTER SET utf8
синтаксис, предложенный другими, вы измените только кодировку по умолчанию для таблицы; существующие столбцы не будут преобразованы, как если бы вы использовали этот ответ.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;
Изменить кодировку таблицы по умолчанию:
ALTER TABLE etape_prospection CHARACTER SET utf8, COLLATE utf8_general_ci;
Чтобы изменить кодировку строкового столбца, выполните этот запрос:
ALTER TABLE etape_prospection CHANGE COLUMN etape_prosp_comment etape_prosp_comment TEXT CHARACTER SET utf8 COLLATE utf8_general_ci;
источник
Команда
ALTER TABLE
MySQL должна помочь. Следующая команда изменит набор символов по умолчанию для вашей таблицы и набор символов всех ее столбцов на UTF8.ALTER TABLE etape_prospection CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
Эта команда преобразует все текстовые столбцы в таблице в новый набор символов. Наборы символов используют разное количество данных для каждого символа, поэтому MySQL преобразует тип некоторых столбцов, чтобы обеспечить достаточно места для того же количества символов, что и для старого типа столбца.
Я рекомендую вам прочитать документацию ALTER TABLE MySQL, прежде чем изменять какие-либо данные в реальном времени.
источник
Если кто-то ищет полное решение для изменения кодировки по умолчанию для всех таблиц базы данных и преобразования данных, это может быть одно:
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 ;
Вы можете поместить этот код в файл, например,
chg_char_set.sql
и выполнить его, например, вызвав его из терминала MySQL:Затем вызовите определенную процедуру с желаемыми входными параметрами, например
CALL change_character_set('utf8mb4', 'utf8mb4_bin');
После проверки результатов вы можете отбросить эти хранимые процедуры:
DROP PROCEDURE `change_character_set`; DROP PROCEDURE `exec_query`;
источник
Вы можете изменить значение по умолчанию с помощью,
alter table set default charset
но это не изменит кодировку существующих столбцов. Чтобы изменить это, вам нужно использовать файлalter table modify column
.Изменение кодировки столбца означает только то, что он сможет хранить более широкий диапазон символов. Ваше приложение общается с db с помощью клиента mysql, поэтому вам может потребоваться также изменить кодировку клиента.
источник