既存のテーブルがあり、特定の 1 つの列のみの文字セットを utf-8 に変換したいと考えています。
このコマンドがテーブル全体に対して実行されることは知っていALTER TABLE table_name CONVERT TO CHARACTER SET utf8
ますが、列固有のコマンドを探しています。
そのためのコマンドはありますか?
既存のテーブルがあり、特定の 1 つの列のみの文字セットを utf-8 に変換したいと考えています。
このコマンドがテーブル全体に対して実行されることは知っていALTER TABLE table_name CONVERT TO CHARACTER SET utf8
ますが、列固有のコマンドを探しています。
そのためのコマンドはありますか?
私はそれを共有します、それは常に役に立ちます... 最近データベースを変更しました。utf8 から utf8mb4 への移行。これが、変更を生成できるスクリプトです...
テーブルを変更する SQL コマンドを生成します。
SELECT CONCAT("ALTER TABLE `",`TABLE_NAME`,"` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;")
FROM `information_schema`.`TABLES`
WHERE `TABLE_SCHEMA` = 'xxxx';
各列を変更する SQL コマンドを生成します。
SELECT CONCAT("ALTER TABLE `",`TABLE_NAME`,"` MODIFY `",`COLUMN_NAME`,"` ",COLUMN_TYPE," CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ",IF(`IS_NULLABLE`='YES', 'NULL', 'NOT NULL')," ",IF(`COLUMN_DEFAULT` IS NOT NULL, CONCAT(" DEFAULT '", `COLUMN_DEFAULT`, "'"), ''),";")
FROM `information_schema`.`COLUMNS`
WHERE `TABLE_SCHEMA` = 'xxx' AND `TABLE_NAME` = 'xxxx' AND (`CHARACTER_SET_NAME` IS NOT NULL OR `COLLATION_NAME` IS NOT NULL);
リレーションシップを作成する外部キーと主キーの場合、列を変更する前に外部キー チェックを無効にする必要があることに注意してください。
SET FOREIGN_KEY_CHECKS=0;
後で有効にします。
SET FOREIGN_KEY_CHECKS=1;