Tôi cần phải thực hiện các câu lệnh này trong tất cả các bảng cho tất cả các cột.
alter table table_name charset=utf8;
alter table table_name alter column column_name charset=utf8;
Có thể tự động hóa điều này theo bất kỳ cách nào trong MySQL không? Tôi muốn tránh mysqldump
Cập nhật: Richard Bronosky chỉ cho tôi cách :-)
Truy vấn tôi cần để thực hiện trong mỗi bảng:
alter table DBname.DBfield CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
Truy vấn điên để tạo tất cả các truy vấn khác:
SELECT distinct CONCAT( 'alter table ', TABLE_SCHEMA, '.', TABLE_NAME, ' CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;' ) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'DBname';
Tôi chỉ muốn thực hiện nó trong một cơ sở dữ liệu. Nó đã mất quá nhiều thời gian để thực hiện tất cả trong một lần. Hóa ra là nó đang tạo một truy vấn trên mỗi trường trên mỗi bảng. Và chỉ có một truy vấn trên mỗi bảng là cần thiết (khác biệt với giải cứu). Nhận đầu ra trên một tập tin là cách tôi nhận ra nó.
Cách tạo đầu ra cho một tệp:
mysql -B -N --user=user --password=secret -e "SELECT distinct CONCAT( 'alter table ', TABLE_SCHEMA, '.', TABLE_NAME, ' CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;' ) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'DBname';" > alter.sql
Và cuối cùng để thực hiện tất cả các truy vấn:
mysql --user=user --password=secret < alter.sql
Cảm ơn Richard. Bạn là đàn ông!