有一个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
。怎么做?
答案 0 :(得分:171)
如果要将表default character set
和所有字符列更改为新字符集,请使用如下语句:
ALTER TABLE tbl_name CONVERT TO CHARACTER SET charset_name;
所以查询将是:
ALTER TABLE etape_prospection CONVERT TO CHARACTER SET utf8;
答案 1 :(得分:17)
更改表格默认字符集:
ALTER TABLE etape_prospection
CHARACTER SET utf8,
COLLATE utf8_general_ci;
要更改字符串列charset,请执行以下查询:
ALTER TABLE etape_prospection
CHANGE COLUMN etape_prosp_comment etape_prosp_comment TEXT CHARACTER SET utf8 COLLATE utf8_general_ci;
答案 2 :(得分:4)
ALTER TABLE
MySQL命令应该可以解决问题。以下命令将更改表的默认字符集,并将其所有列的字符集更改为UTF8。
ALTER TABLE etape_prospection CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
此命令会将表中所有类似文本的列转换为新的字符集。字符集每个字符使用不同数量的数据,因此MySQL将转换某些列的类型以确保有足够的空间来容纳与旧列类型相同数量的字符。
我建议您在修改任何实时数据之前阅读ALTER TABLE MySQL documentation。
答案 3 :(得分:2)
您可以使用alter table set default charset
更改默认值,但不会更改现有列的字符集。要更改它,您需要使用alter table modify column
。
更改列的字符集只意味着它可以存储更广泛的字符。您的应用程序使用mysql客户端与数据库进行通信,因此您可能还需要更改客户端编码。
答案 4 :(得分:0)
如果有人正在寻找一个完整的解决方案,以更改所有数据库表的默认字符集并转换数据,则可能是这样:
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');