1. ホーム
  2. mysql

[解決済み] データベース内のすべてのテーブルを1つの照合順序に変換するには?

2023-03-04 22:52:12

質問

エラーが発生します。

操作 '='"' の照合順序 (utf8_general_ci,IMPLICIT) と (utf8_unicode_ci,IMPLICIT) が不正に混在しています。

私は両方のテーブルを手動で変更してみて utf8_general_ci,IMPLICIT に変更してみましたが、まだエラーが出ます。

すべてのテーブルを utf8_general_ci,IMPLICIT に変換して終了する方法はありますか?

どのように解決するのですか?

各テーブルに対して、alter tableステートメントを実行する必要があります。ステートメントは、次のような形式になります。

ALTER TABLE tbl_name
[[DEFAULT] CHARACTER SET charset_name]
[COLLATE collation_name]

さて、データベース内のすべてのテーブルを取得するためには、以下のクエリを実行する必要があります。

SELECT * 
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA="YourDataBaseName"
AND TABLE_TYPE="BASE TABLE";

それでは、MySQLにコードを書いてもらいましょう。

SELECT CONCAT("ALTER TABLE ", TABLE_SCHEMA, '.', TABLE_NAME," COLLATE your_collation_name_here;") AS    ExecuteTheString
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA="YourDatabaseName"
AND TABLE_TYPE="BASE TABLE";

結果をコピーして実行することができます。構文のテストはしていませんが、あとはおわかりになるはずです。ちょっとした練習だと思ってください。

お役に立てれば幸いです。