こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

(MySQL)全てのテーブルの照合順序を変更したい

MySQL5.1.33-communityをWindows上のXAMPPにて使用しています。
操作端末としてphpMyAdmin3.1.3.1を使用しています。

約90個のテーブルがあり、それらの照合順序が意に反してlatin1_swedish_ciになっており、これらを全てujis_japanese_ciに変更したいと思っています。

この場合、ALTER TABLE 文で行えばいいというのはわかるのですが、
ALTER TABLE `テーブル名` CONVERT TO CHARACTER SET ujisとして1つずつテーブル名を指定しなければできないのでしょうか。
まとめて一撃で行う方法はありませんか?
ALTER TABLE * CONVERT TO CHARACTER SET ujis

とやってみても通りませんでした。
DROP TABLEの場合、テーブル名をコンマで区切って列挙して複数テーブルを一撃でDROPできたのですが、ALTER TABLEの方ではどうも通りませんでした。

普段はPostgreSQLを使っているのでMySQLについてははじめての経験です。詳しい方、よろしくご教示ください。

投稿日時 - 2009-12-16 00:30:26

QNo.5525746

すぐに回答ほしいです

質問者が選んだベストアンサー

drop系など、全表を対象にすることは稀であったり、安易に実行すべきでないものは、どのRDBMSでも実装されていません。
こういった操作を効率的に実装する手段として、システムカタログ(ディクショナリなどと呼ぶRDBMSもある)からselect文で表名などを得て、SQLを文字列で組み立てて実行するといったことがよく行われます。

MySQLでも、MySQL 5.0から、標準SQL準拠の情報スキーマ(information_schema)が実装されています。
information_schemaのtables表を検索し、alter table文を文字列で生成して、実行するとよいでしょう。

投稿日時 - 2009-12-16 10:20:28

お礼

やはりそうでしたか・・・・
結局はスキーマから読みとってalter tableをループさせる、ということなんですね。

確かに危険なことはわかるのですが、ワンタッチでできるとうれしいんですがね。alter table * ~というように・・・

投稿日時 - 2009-12-17 00:50:50

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(1)

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-