MySqlは、テーブルとテーブル内のフィールドの文字セットとソートルールを一括して変更します.


テストライブラリの新しいテーブルをNavicatを介してアリクラウドのMySqlデータベースにコピーすると、フロントエンドページ要求クエリーに失敗しました.
ターゲット・データベースのデフォルトのソート・ルールはutf8mb4_0900_ai_ciで、既存のテーブルではこの符号化が使用されていますが、ソース・データベースのソート・ルールはutf8mb4_unicode_ciで、新しくコピーされたテーブルでは後者が使用されます.
データベースが複数のテーブル関連クエリーを行う場合、2つのテーブルの文字セットまたはソートルールが一致しない場合は、エラーが発生します.
Navicatから手動で符号化を修正する効率は低く、表を変更するだけでは長くはかかりませんが、問題は表を変更するだけではだめで、表内のすべてのvarcharの符号化は表について行かないことです.
そのため、量産操作の道を歩む必要がある.
フィールドの一括変更
SELECT
    CONCAT(
        'ALTER TABLE `',
        TABLE_NAME,
        '` MODIFY `',
        COLUMN_NAME,
        '` ',
        DATA_TYPE,
        '(',
        CHARACTER_MAXIMUM_LENGTH,
        ') CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci',
        ( CASE WHEN IS_NULLABLE = 'NO' THEN ' NOT NULL' ELSE '' END ),
        ';' 
) 
FROM
    information_schema.COLUMNS 
WHERE
    TABLE_SCHEMA = '    ' 
    AND (
    DATA_TYPE = 'varchar' 
    OR DATA_TYPE = 'char')

一括変更テーブル
SELECT
    CONCAT( 'ALTER TABLE ', TABLE_NAME, ' CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;' ) 
FROM
    information_schema.TABLES 
WHERE
    TABLE_SCHEMA = '    ';

以上のSQL文のutf8mb4utf8mb4_unicode_ci をそれぞれ自分の必要な値に変更し、正常に実行した後、実行結果であるSQL文をコピーし、これらのSQL文を実行すればよい.