MySQLでカラム拡張(Varchar256→512)を行うと
ALTER TABLE hogeテーブル MODIFY カラムB varchar(512) not null;
Specified key was too long; max key length is 1000 bytes
上記のエラーとなります。
調べたところ、
MyISAM の場合、複合インデックスで全てのカラムの byte 数を合計した結果が 1000 bytes を超えるとダメ
という記載がありました。(個人ブログ)
現状のhogeテーブルのindexを確認したところ、以下の通りです
カラムA(PRIMARY ):bigint(20)
カラムB(MUL):varchar(256) ※拡張対象
カラムC:varchar(10)
バイト数を計算したところ、
カラムA:20×8=160バイト(bigintは8桁までらしいので)
カラムBを拡張したとしても:512バイト(ASCII文字指定だったので1文字1バイト)
カラムC:10×3=30バイト(文字コード指定がなかったので、最高でも1文字3バイトかと)
全て足しても1000バイト行かないと思っているのですが、
計算間違っているでしょうか?
またなぜエラーとなるか、他に原因は考えられるでしょうか?
カラムBはVarcharですが、テーブル作成時に
「カラムB varchar(256) CHARACTER SET ascii NOT NULL 」
と指定されているので、1文字1バイトだと考えています。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/04/12 01:28
2021/04/12 13:05
2021/04/14 05:18