この記事の元のリンク:https://blog.csdn.net/xzk9381/article/details/114872488
1つは、外部キーの制約に対処する
大量のデータを処理する場合、外部キー制約の問題が発生し、データを正常に変更できない場合があります。したがって、変更コマンドを実行する前に、外部キー制約を無視するように設定し、変更の完了後に開くことができます。コマンドは次のとおりです。
SET FOREIGN_KEY_CHECKS=0;
-- Insert your other SQL Queries here...
SET FOREIGN_KEY_CHECKS=1;
2つ目は、データベースの文字セットと並べ替えを変更することです。
ライブラリの文字セットと並べ替えを変更するには、次のコマンドを使用できます。
ALTER DATABASE <yourDB> CHARACTER SET <charset> COLLATE <collation>
たとえば、wikiデータベースの文字セットをutf8に変更し、utf8_binに並べ替えます。
ALTER DATABASE wiki CHARACTER SET utf8 COLLATE utf8_bin;
3つ目は、テーブルの文字セットと並べ替えを変更することです。
テーブルの文字セットを変更するには、次のコマンドを使用できます。
SELECT CONCAT('ALTER TABLE `', table_name, '` CHARACTER SET <charset> COLLATE <collation>;')
FROM information_schema.TABLES AS T, information_schema.`COLLATION_CHARACTER_SET_APPLICABILITY` AS C
WHERE C.collation_name = T.table_collation
AND T.table_schema = '<yourDB>'
AND
(
C.CHARACTER_SET_NAME != '<charset>'
OR
C.COLLATION_NAME != '<collation>'
);
たとえば、wikiデータベースのテーブル文字セットをutf8に変更し、並べ替えをutf8_binに変更します。
SELECT CONCAT('ALTER TABLE `', table_name, '` CHARACTER SET utf8 COLLATE utf8_bin;')
FROM information_schema.TABLES AS T, information_schema.`COLLATION_CHARACTER_SET_APPLICABILITY` AS C
WHERE C.collation_name = T.table_collation
AND T.table_schema = 'wiki'
AND
(
C.CHARACTER_SET_NAME != 'utf8'
OR
C.COLLATION_NAME != 'utf8_bin'
);
上記のコマンドの実行が完了すると、テーブルを変更するためのいくつかのステートメントが出力され、これらのステートメントがコピーされてデータベースに実行され、テーブルの変更が完了します。
第四に、文字セットとフィールドの並べ替えを変更します
データ型がvarcharの場合は、次のコマンドを使用して、フィールドの文字セットと並べ替えを変更します。
SELECT CONCAT('ALTER TABLE `', table_name, '` MODIFY `', column_name, '` ', DATA_TYPE, '(', CHARACTER_MAXIMUM_LENGTH, ') CHARACTER SET <charset> COLLATE <collation>', (CASE WHEN IS_NULLABLE = 'NO' THEN ' NOT NULL' ELSE '' END), ';')
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = '<yourDB>'
AND DATA_TYPE = 'varchar'
AND
(
CHARACTER_SET_NAME != '<charset>'
OR
COLLATION_NAME != '<collation>'
);
データ型がvarchar以外の場合は、次のコマンドを使用して、フィールドの文字セットと並べ替えを変更します。
SELECT CONCAT('ALTER TABLE `', table_name, '` MODIFY `', column_name, '` ', DATA_TYPE, ' CHARACTER SET <charset> COLLATE <collation>', (CASE WHEN IS_NULLABLE = 'NO' THEN ' NOT NULL' ELSE '' END), ';')
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = '<yourDB>'
AND DATA_TYPE != 'varchar'
AND
(
CHARACTER_SET_NAME != '<charset>'
OR
COLLATION_NAME != '<collation>'
);
上記のSQLを実行すると、フィールドを変更するためのSQLが出力されます。これらのSQLをmysqlにコピーして実行すると、フィールドの変更が完了します。
この記事の元のリンク:https://blog.csdn.net/xzk9381/article/details/114872488