私はこれをやろうとしました: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_bin
MySQL 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 のバージョンは何ですか?