Как изменить кодировку по умолчанию для таблицы MySQL? - PullRequest
76 голосов
/ 18 января 2012

Существует 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. Как это сделать?

Ответы [ 5 ]

173 голосов
/ 18 января 2012

Если вы хотите изменить таблицу default character set и все столбцы символов на новый набор символов, используйте следующую инструкцию:

ALTER TABLE tbl_name CONVERT TO CHARACTER SET charset_name;

Таким образом, запрос будет:

ALTER TABLE etape_prospection CONVERT TO CHARACTER SET utf8;
17 голосов
/ 18 января 2012

Изменить кодировку таблицы по умолчанию:

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;
4 голосов
/ 18 января 2012

Команда MySQL ALTER TABLE должна помочь.Следующая команда изменит набор символов по умолчанию вашей таблицы и набор символов всех ее столбцов на UTF8.

ALTER TABLE etape_prospection CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

Эта команда преобразует все текстоподобные столбцы в таблице в новый набор символов.Наборы символов используют разные объемы данных на символ, поэтому MySQL преобразует тип некоторых столбцов, чтобы обеспечить достаточно места для того же количества символов, что и для старого типа столбца.

Я рекомендую прочитать ALTER TABLE MySQL документация перед изменением любых живых данных.

2 голосов
/ 18 января 2012

Вы можете изменить значение по умолчанию с помощью alter table set default charset, но это не изменит кодировку существующих столбцов. Чтобы изменить это, вам нужно использовать alter table modify column.

Изменение только набора символов столбца означает, что он сможет хранить более широкий диапазон символов. Ваше приложение общается с БД с помощью клиента mysql, поэтому вам, возможно, придется изменить и кодировку клиента.

1 голос
/ 09 декабря 2018

Если кто-то ищет полное решение для изменения кодировки по умолчанию для всех таблиц базы данных и преобразования данных, это может быть одно:

DELIMITER $$

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();
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;
SET @alter = concat('ALTER TABLE ', tab_name,
                    ' CONVERT TO CHARACTER SET ', charset,
                    ' COLLATE ', collation , ';');
SELECT @alter;
PREPARE stmt FROM @alter;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END LOOP change_loop;
CLOSE charset_cursor;
SET foreign_key_checks = 1;
END$$

DELIMITER ;

Вы можете поместить этот код в файл, например, chg_char_set.sql и выполнить его, например. позвонив из терминала MySQL:

mysql> source ~/path-to-the-file/chg_char_set.sql

Затем вызвать определенную процедуру с желаемыми входными параметрами, например,

mysql> change_character_set('utf8mb4', 'utf8mb4_general_ci');
...