【问题标题】:Mysql change default table charset to database charsetMysql将默认表字符集更改为数据库字符集
【发布时间】:2011-08-11 15:28:34
【问题描述】:

我的 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  

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

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   

有没有办法在不重新创建表的情况下做到这一点?

【问题讨论】:

    标签: mysql


    【解决方案1】:

    要更改表格的字符集,从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;
    

    【讨论】:

    • 我知道,但是当我这样做时,DEFAULT CHARSET 块不会从我的表定义中删除
    • 您可能想要更改整个数据库。我在答案中添加了更多信息。我怀疑您的表的默认字符集和活动字符集可能不同,但这取决于您如何生成定义。 SHOW CREATE TABLE tbl_name 应该可以工作。在我执行ALTER TABLE 语句更改字符集后,SHOW CREATE TABLE... 查询将新字符集显示为 DEFAULT CHARSET。要获取字符集/排序规则列表,请使用 SHOW COLLATION
    • 我想从表定义中完全删除 DEFAULT CHARSET 块,而不是更改表的默认字符集,而是删除此块以使每个表都使用数据库编码
    • 我不相信您可以删除默认字符集。请参阅9.1.3. Specifying Character Sets and Collations 了解更多信息,抱歉,我不确定还有什么可以推荐的。
    【解决方案2】:

    您可以使用以下内容更改表和架构的排序规则和默认字符集:

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

    【讨论】:

      猜你喜欢
      • 2015-09-29
      • 2012-01-30
      • 1970-01-01
      • 2012-02-12
      • 2022-01-17
      • 2014-03-22
      • 2018-11-13
      • 2011-03-31
      相关资源
      最近更新 更多