Reputation: 841
I have problem with mysql table charset. Every table in my database has default charset. For example:
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
I want to remove DEFAULT CHARSET block, so table could use database 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
Is there any way to do this without recreating the table?
Upvotes: 6
Views: 13199
Reputation: 14051
You can use the following to change collation and default character set for tables and schemas:
alter table TABLENAME convert to CHARACTER SET utf8 COLLATE utf8_unicode_ci;
alter database SCHEMA default character set utf8 COLLATE utf8_unicode_ci;
Upvotes: 3
Reputation: 36512
To change a table's character set, from MySQL Documentation:
If you want to change the table default character set and all character columns (CHAR, VARCHAR, TEXT) to a new character set, use a statement like this:
ALTER TABLE tbl_name CONVERT TO CHARACTER SET charset_name;
If you want to convert an entire database to use a different default character set, you can issue this statement: (from Default Character Set and Collation)
ALTER DATABASE db_name DEFAULT CHARACTER SET charset_name;
Upvotes: 11