Ubah semua tabel dalam database dengan satu perintah

13

Apakah ada perintah satu atau satu baris untuk memodifikasi semua tabel dalam database. Saya ingin mengeluarkan perintah ini di setiap tabel dalam database:

ALTER TABLE `table_name` CONVERT TO CHARACTER SET utf8;

Tujuan saya adalah memodifikasi rangkaian karakter dari latin1 ke utf8 ke semua tabel.

UPDATE: RDBMS adalah MySQL

Mar Cejas
sumber

Jawaban:

18

Tidak, tidak ada perintah seperti itu. Tetapi yang dapat Anda lakukan adalah menulis kueri cepat untuk menghasilkan SQL untuk Anda seperti:

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";

Kemudian Anda dapat menjalankan output dari ini untuk melakukan apa yang Anda butuhkan.

Sumber:

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

Mr.Brownstone
sumber
Tidak, tidak ada cara untuk melakukan apa yang Anda inginkan dalam satu perintah.
Mr.Brownstone
Agar ini berfungsi di bawah MariaDB, untuk beberapa alasan, saya harus meninggalkan WHERE TABLE_SCHEMA = "your_schema_goes_here"perintah.
Gwyneth Llewelyn
2

Cara termudah: ekspor database. Buka basis data yang diekspor dalam editor teks dan lakukan Cari / Ganti dengan "UTF8" atau apa pun. Impor ulang database yang diubah.

Andrew Smith
sumber
1
Mengapa ini cara termudah? Bagaimana jika Anda tidak dapat menurunkan DB untuk mengubah rangkaian karakter?
dezso
Karena itu tidak memerlukan pengetahuan SQL. Jelas, jika Anda tidak dapat mengekspor database: kemudahan dan metode ini tidak akan relevan. Tetapi, jika Anda memiliki hak istimewa yang cukup untuk mengedit database secara langsung, kemungkinan besar Anda juga dapat mengekspornya.
Andrew Smith
Ini adalah solusi terbaik dalam kasus saya! perbaikan cepat yang cukup berguna. Saya sedang bekerja di lokal saya ketika saya mulai memiliki kesalahan "campuran ilegal pemeriksaan" dalam database saya untuk beberapa alasan. +1.
evl183
1

Jika Anda bekerja dengan MS SQL Server, maka ada prosedur tersimpan tanpa dokumen yang dapat Anda gunakan. Gunakan ganti nama tabel dengan? dalam pernyataan itu.

Jadi, dalam contoh Anda

EXEC ms_foreachtable 'ALTER TABLE [?] .....'
Kenneth Fisher
sumber
Artikel ini berbicara tentang memiliki ms_foreachtable di MYSQL MYSQL CLONE OF SP_MSFOREACHTABLE
Maryam Arshi