Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

ALTER TABLE tbl_name CONVERT TO CHARACTER SET charset_name;

Таким образом, запрос будет выглядеть следующим образом:

ALTER TABLE etape_prospection CONVERT TO CHARACTER SET utf8;

Ответ 2

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

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;

Ответ 3

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

ALTER TABLE etape_prospection CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

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

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

Ответ 4

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

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:

SOURCE ~/path-to-the-file/chg_char_set.sql

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

CALL change_character_set('utf8mb4', 'utf8mb4_bin');

После того, как вы проверили результаты, вы можете удалить эти хранимые процедуры:

DROP PROCEDURE 'change_character_set';
DROP PROCEDURE 'exec_query';

Ответ 5

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

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