単一のコマンドでデータベース内のすべてのテーブルを変更する


13

データベース内のすべてのテーブルを変更する単一または1行のコマンドはありますか。データベース内のすべてのテーブルでこのコマンドを発行したいと思います。

ALTER TABLE `table_name` CONVERT TO CHARACTER SET utf8;

私の目的は、すべてのテーブルの文字セットをlatin1からutf8に変更することです。

更新: RDBMSはMySQLです

回答:


18

いいえ、そのようなコマンドはありません。しかし、あなたができることは、あなたのためにSQLを生成するための簡単なクエリを書くことです:

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

次に、これからの出力を実行して、必要なことを実行できます。

ソース:

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


いいえ、1つのコマンドで必要なことを行う方法はありません。
Mr.Brownstone

これをMariaDBで機能させるには、何らかの理由WHERE TABLE_SCHEMA = "your_schema_goes_here"で、コマンドを除外する必要がありました。
グウィネスLlewelyn

2

最も簡単な方法:データベースをエクスポートします。エクスポートされたデータベースをテキストエディタで開き、「UTF8」などで検索/置換を実行します。修正されたデータベースを再インポートします。


1
なぜこれが最も簡単な方法ですか?DBを停止して文字セットを変更できない場合はどうなりますか?
dezso

SQLの知識を必要としないためです。もちろん、データベースをエクスポートできない場合は、簡単です。この方法は関係ありません。ただし、データベースを直接編集するための十分な権限がある場合は、エクスポートすることもできます。
アンドリュースミス

私の場合、これが最善の解決策でした!非常に便利なクイックフィックス。何らかの理由でデータベースに「違法な照合の組み合わせ」エラーが発生し始めたとき、私は地元で働いていました。+1。
evl183

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.