BLOGTIMES
2018/02/10

MySQL/MariaDB に Error 1709: Index column size too large. The maximum column size is 767 bytes. と言われた時は

  mysql  charset 
このエントリーをはてなブックマークに追加

MySQL や MariaDB で文字コードを utf8mb4 にしようとすると以下のようなエラーに遭遇することがあります。

Error 1709: Index column size too large. The maximum column size is 767 bytes.

例えばこんな感じでデータベースを作ったときですね。

CREATE DATABASE hogedb CHARACTER SET utf8mb4;

これは InnoDB の最大キー長が 767 バイトに制限されているため。
この制限はある条件をクリアすると 3072 バイトまでに緩和*1することができます。

その条件は row_format が DYNAMIC もしくは COMPRESSED (これを設定するためには innodb_file_format が Barracuda であることが必要になります)であり、innodb_file_per_table、innodb_large_prefix が有効になっていること。具体的には my.cnf に以下のような設定を記述するだけです。ちなみに以下の設定は既に作成済みのテーブルには効果がないので、設定変更後にテーブルを作り直す必要があることに注意が必要です。

/etc/my.cnf.d/server.cnf

[mysqld] innodb_file_format = Barracuda innodb_file_per_table = 1 innodb_large_prefix = on innodb_default_row_format = DYNAMIC # この設定が効かない場合には以下を参照

最後の行の設定ができない場合には、テーブルの CREATE 文に以下のような感じで ROW_FORMAT=DYNAMIC を追加してやる必要があります。

CREATE TABLE `hogetable` ( id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;

トラックバックについて
Trackback URL:
お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/9965
Trackbacks
このエントリにトラックバックはありません
Comments
愛のあるツッコミをお気軽にどうぞ。[policy]
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントはありません
Comments Form

コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。

OpenID を使ってログインすることができます。

Identity URL: Yahoo! JAPAN IDでログイン