web-dev-qa-db-ja.com

Mysql:列の文字セットを設定する

既存のテーブルがあり、特定の1列の文字セットのみをutf-8に変換したい。

このコマンドALTER TABLE table_name CONVERT TO CHARACTER SET utf8はテーブル全体に対して実行しますが、列固有のコマンドを探しています。

そのためのコマンドはありますか?

37
Subway

これを試して:

ALTER TABLE t MODIFY col1 CHAR(50) CHARACTER SET utf8;
67
divyabharathi

私はそれを共有し、それは常に役立つことができます...私は最近データベースを変更しました。 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);

リレーションシップを作成する外部キーと主キーの場合、列を変更する前に、foreginキーチェックを無効にする必要があることに注意してください。

SET FOREIGN_KEY_CHECKS=0;

後で有効にします。

SET FOREIGN_KEY_CHECKS=1;
7
Abdel

これは私のために働いた。

ALTER TABLE `table_name` CHANGE `column_name` `column_name` TEXT CHARACTER SET utf8 COLLATE utf8mb4_unicode_ci; 
0
Rishab

以下は私のために働いた。

ALTER TABLE table_name   
MODIFY column_name VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci;
0
Niroopchowdary