MySqlは、テーブルとテーブル内のフィールドの文字セットとソートルールを一括して変更します.
テストライブラリの新しいテーブルをNavicatを介してアリクラウドのMySqlデータベースにコピーすると、フロントエンドページ要求クエリーに失敗しました.
ターゲット・データベースのデフォルトのソート・ルールは
データベースが複数のテーブル関連クエリーを行う場合、2つのテーブルの文字セットまたはソートルールが一致しない場合は、エラーが発生します.
Navicatから手動で符号化を修正する効率は低く、表を変更するだけでは長くはかかりませんが、問題は表を変更するだけではだめで、表内のすべてのvarcharの符号化は表について行かないことです.
そのため、量産操作の道を歩む必要がある.
フィールドの一括変更
一括変更テーブル
以上のSQL文の
ターゲット・データベースのデフォルトのソート・ルールは
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文の
utf8mb4
、utf8mb4_unicode_ci
、
をそれぞれ自分の必要な値に変更し、正常に実行した後、実行結果であるSQL文をコピーし、これらのSQL文を実行すればよい.