2011-08-11 50 views
5

Tôi gặp vấn đề với bảng mã mysql. Mỗi bảng trong cơ sở dữ liệu của tôi có bộ ký tự mặc định. Ví dụ:Mysql thay đổi bảng mã mặc định thành bộ ký tự cơ sở dữ liệu

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 

Tôi muốn loại bỏ khối CHARSET DEFAULT, vì vậy bảng có thể sử dụng cơ sở dữ liệu charset mặc định:

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 

Có cách nào để làm điều này mà không cần tái tạo bảng?

Trả lời

9

Để thay đổi bộ ký tự của bảng, từ MySQL Documentation:

Nếu bạn muốn thay đổi các nhân vật bảng mặc định thiết lập và tất cả các cột ký tự (CHAR, VARCHAR, TEXT) cho một bộ ký tự mới, sử dụng một tuyên bố như thế này :

ALTER TABLE tbl_name CONVERT TO CHARACTER SET charset_name; 

Nếu bạn muốn chuyển đổi toàn bộ cơ sở dữ liệu để sử dụng một bộ ký tự mặc định khác nhau, bạn có thể đưa ra tuyên bố này: (từ Default Character Set and Collation)

01.
ALTER DATABASE db_name DEFAULT CHARACTER SET charset_name; 
+0

tôi biết, nhưng khi tôi làm như vậy, 'DEFAULT khối CHARSET' không khỏi định nghĩa bảng của tôi – Ris90

+0

Bạn có thể muốn thay đổi toàn bộ cơ sở dữ liệu sau đó. Tôi đã thêm thông tin vào câu trả lời. Tôi nghi ngờ rằng bộ ký tự mặc định và bộ ký tự hoạt động có thể khác nhau cho bảng của bạn, nhưng nó phụ thuộc vào cách bạn tạo ra định nghĩa. 'SHOW CREATE TABLE tbl_name' sẽ hoạt động. Sau khi tôi thực thi câu lệnh 'ALTER TABLE' để thay đổi bộ ký tự, truy vấn' SHOW CREATE TABLE ... 'hiển thị bộ ký tự mới như là DEFAULT CHARSET. Để có danh sách các bộ ký tự/collations, sử dụng ['SHOW COLLATION'] (http://dev.mysql.com/doc/refman/5.1/en/show-collation.html). – JYelton

+0

Tôi không muốn xóa hoàn toàn khối DEFAULT CHARSET khỏi định nghĩa bảng, không phải chageet charset mặc định cho bảng, nhưng loại bỏ khối này để làm cho mỗi bảng sử dụng mã hóa cơ sở dữ liệu – Ris90

2

Bạn có thể sử dụng sau đây để thay đổi đối chiếu và ký tự mặc định cho các bảng và lược đồ:

alter table TABLENAME convert to CHARACTER SET utf8 COLLATE utf8_unicode_ci; 
alter database SCHEMA default character set utf8 COLLATE utf8_unicode_ci; 
Các vấn đề liên quan