Nếu các cột đang sử dụng bộ ký tự bảng mặc định thì chỉ cần một truy vấn cho mỗi bảng để chuyển đổi:
ALTER TABLE t CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
Nếu bộ ký tự được đặt riêng lẻ trên mỗi cột, AFAIK không có cách nào để thực hiện điều đó trên tất cả các cột của tất cả các bảng trong cơ sở dữ liệu trực tiếp trong MySql, nhưng bạn có thể viết một chương trình nhỏ bằng ngôn ngữ bạn chọn để làm như vậy.
Chương trình của bạn sẽ truy vấn INFORMATION_SCHEMA.COLUMNS
bảng và nhìn vào CHARACTER_SET_NAME
cột:
SELECT * FROM `INFORMATION_SCHEMA.COLUMNS`
WHERE TABLE_SCHEMA = 'dbname' AND CHARACTER_SET_NAME = 'latin1'
Đối với mỗi hàng kết quả, việc tổng hợp và thực thi một ALTER TABLE
trở nên vô cùng đơn giản truy vấn ngay tại chỗ để thay đổi bộ ký tự và đối chiếu một cách thích hợp:
ALTER TABLE t MODIFY col TEXT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
Trong truy vấn trên t
, col
và TEXT
sẽ là các giá trị của TABLE_NAME
, COLUMN_NAME
và DATA_TYPE
các cột từ INFORMATION_SCHEMA.COLUMNS
tập hợp kết quả.