MySQL のすべてのテーブルと列の照合順序を変更する

MySQL のすべてのテーブルと列の照合順序を変更する

私はこれをやろうとしました:https://serverfault.com/a/65572/603515

ただし、変更したいデータベースのみを対象とするように少し変更しました。

mysql -B -N --host=localhost --user=root --password=secret \
      -e "select CONCAT('alter table ',TABLE_SCHEMA,'.',
          TABLE_NAME,' charset=utf8mb4_bin;')
        from information_schema.TABLES WHERE TABLE_SCHEMA = 'usda_nndsr'; 
     select CONCAT('alter table ',TABLE_SCHEMA,'.',TABLE_NAME,' alter column ',
         COLUMN_NAME,' charset=utf8mb4_bin;')
         from information_schema.COLUMNS WHERE TABLE_SCHEMA ='usda_nndsr';" |
     mysql --host=localhost --user=root --password=secret

しかし、それは私にこう伝えています:

mysql: mysql: [Warning] Using a password on the command line interface can be insecure.[Warning] Using a password on the command line interface can be insecure.

ERROR 1115 (42000) at line 1: Unknown character set: 'utf8mb4_bin'

utf8mb4_binMySQL utf8 は 3 バイトのみを使用する実際の utf8 ではないと聞いたので、これを望んでいます。

変更するには、クエリまたはコマンドを編集するにはどうすればよいですか。現在は、デフォルトのスウェーデン語の照合順序です。

MySQL バージョン:

$ mysql -V
mysql  Ver 14.14 Distrib 5.7.32, for Linux (x86_64) using  EditLine wrapper

答え1

utf8mb4_binは「文字セット」ではなく「照合」です。対応する文字セットは単に ですutf8mb4

5.5 より前のバージョンには文字セット utf8mb4 がありませんでした。

データベース全体のすべてのテーブルのすべてのテキスト列を単純に変換することはできません。

これにより、単一のテーブルのすべてのテキスト (VARCHARおよび) 列が変換されます。TEXT

ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4;

文字セットを修正した後でも、提案されている複雑な mysql を信頼することはできません。 を使用する場合、不明な点がいくつかあります-e。 代わりに、SELECTを実行して のリストを生成しALTERs、それを にコピーして貼り付けますmysql

「テーブル」を変更すると、任意のデフォルトの文字セットのみが変更されます。未来追加する可能性のある列。

CONVERT TO列を変更します。データのエンコーディングと列の定義の両方が変更されます。列は現在 ですかutf8? 実行している MySQL のバージョンは何ですか?

関連情報