Sửa đổi tất cả các bảng trong cơ sở dữ liệu bằng một lệnh duy nhất


13

Có một lệnh đơn hay một dòng để sửa đổi tất cả các bảng trong cơ sở dữ liệu. Tôi muốn ban hành lệnh này trong mỗi bảng trong cơ sở dữ liệu:

ALTER TABLE `table_name` CONVERT TO CHARACTER SET utf8;

Mục tiêu của tôi là sửa đổi bộ ký tự từ latin1 thành utf8 cho tất cả các bảng.

CẬP NHẬT: RDBMS là MySQL

Câu trả lời:


18

Không, không có lệnh như vậy. Nhưng những gì bạn có thể làm là viết một truy vấn nhanh để tạo SQL cho bạn như vậy:

USE INFORMATION_SCHEMA;
SELECT 
CONCAT("ALTER TABLE `", TABLE_SCHEMA,"`.`", TABLE_NAME, "` CONVERT TO CHARACTER SET UTF8;") 
AS MySQLCMD FROM TABLES 
WHERE TABLE_SCHEMA = "your_schema_goes_here";

Sau đó, bạn có thể chạy đầu ra từ này để làm những gì bạn cần.

Nguồn:

http://forums.mysql.com/read.php?20,244395,244421#msg-244421


Không, không có cách nào để làm những gì bạn muốn trong một lệnh.
Mr.Brownstone

Để có được điều này hoạt động theo MariaDB, vì một số lý do, tôi đã phải rời WHERE TABLE_SCHEMA = "your_schema_goes_here"khỏi lệnh.
Gwyneth Llewelyn

2

Cách dễ nhất: xuất cơ sở dữ liệu. Mở cơ sở dữ liệu đã xuất trong trình soạn thảo văn bản và thực hiện Tìm / Thay thế bằng "UTF8" hoặc bất cứ điều gì. Nhập lại cơ sở dữ liệu sửa đổi.


1
Tại sao đây là cách dễ nhất? Điều gì nếu bạn không thể đưa DB của mình xuống để sửa đổi bộ ký tự?
dezso 17/03/2017

Bởi vì nó không đòi hỏi kiến ​​thức SQL. Rõ ràng, nếu bạn không thể xuất cơ sở dữ liệu: dễ dàng và phương pháp này sẽ không liên quan. Nhưng, nếu bạn có đủ đặc quyền để chỉnh sửa cơ sở dữ liệu trực tiếp, rất có khả năng bạn cũng có thể xuất nó.
Andrew Smith

Đây là giải pháp tốt nhất trong trường hợp của tôi! sửa chữa nhanh chóng mà khá tiện dụng. Tôi đã làm việc tại địa phương của mình khi tôi bắt đầu gặp lỗi "trộn lẫn bất hợp pháp" trong cơ sở dữ liệu của mình vì một số lý do. +1.
evl183

1

Nếu bạn đang làm việc với MS SQL Server thì có một thủ tục được lưu trữ không có giấy tờ ms_foreachtable mà bạn có thể sử dụng. Sử dụng thay thế tên bảng bằng một? trong tuyên bố.

Vì vậy, trong ví dụ của bạn

EXEC ms_foreachtable 'ALTER TABLE [?] .....'

Bài viết này nói về việc có ms_foreachtable trong MYSQL MYSQL Clone OF SP_MSFOREACHTABLE
Maryam Arshi
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.