MySQLバッチは、データベースの文字セットと照合順序を変更します

この記事の元のリンク: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

おすすめ

転載: blog.csdn.net/xzk9381/article/details/114872488