いろいろ備忘録

雑記です。

#1071 - 索引のキーが長すぎます。最大 767 バイトまでです。と出たとき

 

CREATE TABLE tags (
    id INT AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(255),
    created DATETIME,
    modified DATETIME,
    UNIQUE KEY (title)
);

このtitle属性は255文字までを格納する。
同じ文のタグを重複して登録することは許されないため、ユニークキーとして扱いたい。

しかし、例えば文字コードにutfmb4を設定しているとき、utfmb4は各文字4バイトで表現するので総バイト数は 4 * 255 = 1020Bとなり、 767バイトをゆうに超えてしまう。

解決策としては 各文字にかかるバイト数 * 最大文字数 < 767 となるようにSQLを変更する。

上記の場合では191文字が限界。そのため3行目が

title VARCHAR(191)

となる。