2011-08-11 227 views
5

我有问题与MySQL表字符集。我的数据库中的每个表都有默认的字符集。例如:Mysql更改默认表字符集到数据库字符集

CREATE TABLE privacy_settings (
    id_privacy_setting int(11) NOT NULL AUTO_INCREMENT, 
    id_account int(11) NOT NULL, 
    setting_name varchar(255) NOT NULL DEFAULT '0', 
    privacy_level int(11) NOT NULL DEFAULT '0', 
    PRIMARY KEY (id_privacy_setting), 
    KEY fk_privacy_settings_accounts (id_account), 
    CONSTRAINT fk_privacy_settings_accounts FOREIGN KEY (id_account) REFERENCES accounts (id_account) ON DELETE NO ACTION ON UPDATE NO ACTION 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 

我想删除默认字符集块,所以表格可以使用数据库的默认字符集:

CREATE TABLE privacy_settings (
     id_privacy_setting int(11) NOT NULL AUTO_INCREMENT, 
     id_account int(11) NOT NULL, 
     setting_name varchar(255) NOT NULL DEFAULT '0', 
     privacy_level int(11) NOT NULL DEFAULT '0', 
     PRIMARY KEY (id_privacy_setting), 
     KEY fk_privacy_settings_accounts (id_account), 
     CONSTRAINT fk_privacy_settings_accounts FOREIGN KEY (id_account) REFERENCES accounts (id_account) ON DELETE NO ACTION ON UPDATE NO ACTION 
    ) ENGINE=InnoDB 

有没有办法做到这一点无需重新创建表?

回答

9

要更改表的字符集,从MySQL Documentation

如果要更改默认的表字符集和所有字符列(CHAR,VARCHAR,TEXT)改为新的字符集,可使用如下语句:

ALTER TABLE tbl_name CONVERT TO CHARACTER SET charset_name; 

如果要转换整个数据库来使用不同的默认字符集,你可以发出这样的语句:(从Default Character Set and Collation

ALTER DATABASE db_name DEFAULT CHARACTER SET charset_name; 
+0

我知道,但是当我这样做,'DEFAULT CHARSET'块没有从我的表定义 – Ris90

+0

删除然后您可能需要更改整个数据库。我已经为答案添加了更多信息。我怀疑默认字符集和活动字符集对于你的表格可能会有所不同,但这取决于你如何生成定义。 'SHOW CREATE TABLE tbl_name'应该可以工作。在执行'ALTER TABLE'语句来更改字符集后,'SHOW CREATE TABLE ...'查询将新字符集显示为DEFAULT CHARSET。要获取字符集/排序规则列表,请使用['SHOW COLLATION'](http://dev.mysql.com/doc/refman/5.1/en/show-collat​​ion.html)。 – JYelton

+0

我想彻底删除DEFAULT CHARSET块从表定义,而不是chage默认字符集的表,但删除此块,使每个表使用数据库编码 – Ris90

2

您可以使用下面的方法修改整理和默认字符表和模式设置:

alter table TABLENAME convert to CHARACTER SET utf8 COLLATE utf8_unicode_ci; 
alter database SCHEMA default character set utf8 COLLATE utf8_unicode_ci;