【mysql】すでにあるカラムにユニークキーやプライマルキーを追加する方法

すでにあるカラムにユニークキーやプライマルキーを追加するには次のSQL文を実行すればいい。

プライマルキーなら、

mysql> ALTER TABLE テーブル名 ADD PRIMARY KEY (カラム名);

ユニークキーなら、
mysql> ALTER TABLE テーブル名 ADD UNIQUE (カラム名);

もし、

ERROR 1170 (42000): BLOB/TEXT column 'text_field' used in key specification without a key length

のようなエラーが出たら、キーの長さを指定する必要があるので、

プライマルキーなら、

mysql> ALTER TABLE テーブル名 ADD PRIMARY KEY (カラム名(255以下のキーの長さ));

ユニークキーなら、
mysql> ALTER TABLE テーブル名 ADD UNIQUE (カラム名(255以下のキーの長さ));

こう記述するとエラーにならないはず。

しかし カラムが utf8mb4(一文字4バイト) の物に対してキーの長さを 255 にするとエラーが出る。

Specified key was too long; max key length is 767 bytes
(索引のキーが長すぎます。最大 767 バイトまでです。)

この場合、キー長さを 191 以下に下げればいい。

ALTER TABLE テーブル名 ADD PRIMARY KEY (カラム名(191));

4byte × 191 = 764byte

767byte 以内に収まる。