2012-01-18 105 views
54

有一个MySQL table拥有这个定义SQLYog Enterprise采取:如何更改MySQL表的默认字符集?

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 charsetlatin1更改为utf8。怎么做 ?

回答

131

如果你想改变表格default character set和所有字符列到一个新的字符集,可使用如下语句:

ALTER TABLE tbl_name CONVERT TO CHARACTER SET charset_name; 

所以查询将是:

ALTER TABLE etape_prospection CONVERT TO CHARACTER SET utf8; 
+13

相比之下,如果您只是使用别人建议的'ALTER TABLE tbl CHARACTER SET utf8'语法,您将只更改表的默认编码;如果您使用此答案,现有列将不会进行转换。 – eaj 2014-01-27 13:57:06

+4

如果要对数据库中未用ut8编码的所有表应用此更改,可以使用此查询并执行结果查询: 'SELECT concat('alter table',table_name''CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;')FROM information_schema.tables WHERE table_schema =''和table_collat​​ion!='utf8_general_ci'GROUP BY table_name;' – Maxooo 2014-10-09 08:11:46

+2

这不会改变**默认**字符集。要改变默认值,就像eak所说的那样:'ALTER TABLE tbl CHARACTER SET utf8' – 2016-09-22 20:18:56

2

ALTER TABLE MySQL命令应该做的伎俩。以下命令会将您的表的默认字符集及其所有列的字符集更改为UTF8。

ALTER TABLE etape_prospection CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; 

该命令将表中所有文本类的列转换为新的字符集。字符集为每个字符使用不同数量的数据,因此MySQL将转换某些列的类型以确保有足够的空间来容纳与旧列类型相同数量的字符。

我建议您在修改任何实时数据之前阅读ALTER TABLE MySQL documentation

+1

是的,它做的伎俩,但有一点是不同的**转换为**方式:它不能自动从列中删除旧的字符集选项。 – 2014-07-12 09:10:47

13

变更表的默认字符集:

ALTER TABLE etape_prospection 
    CHARACTER SET utf8, 
    COLLATE utf8_general_ci; 

要改变字符串列字符集exceute此查询:

ALTER TABLE etape_prospection 
    CHANGE COLUMN etape_prosp_comment etape_prosp_comment TEXT CHARACTER SET utf8 COLLATE utf8_general_ci; 
+2

你永远不应该使用utf8_general_ci:它根本不起作用。这是从五十年前的ASCII stooopeeedity的糟糕的旧日倒退。如果没有UCD的折叠式地图,Unicode不区分大小写的匹配是不可能的。例如,“Σίσυφος”中有三个不同的卦;或“TSCHüẞ”的小写字母是“tschüβ”,但“tschüβ”的大写字母是“TSCHÜSS”。你可以是对的,或者你可以很快。因此,你必须使用utf8_unicode_ci,因为如果你不关心正确性,那么让它无限快地变得微不足道。 – NPE 2017-04-01 15:41:46

2

您可以更改默认与alter table set default charset但这不会改变的字符集现有的专栏。要改变这一点,你需要使用alter table modify column

更改字段的字符集只意味着它可以存储更广泛的字符。您的应用程序使用mysql客户端与db进行通信,因此您可能还需要更改客户端编码。

+0

如果不是iPod touch上有限的键盘,我会这样做:-) – Joni 2012-01-18 08:15:22

+0

以及iPod Touch/iPhone *必须*有*一些*缺点。 :-P直到你提到它,才意识到它们已经失踪。 ;-) – Aufwind 2012-01-18 08:33:53