73
51

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

MySQLでBLOB/TEXT型カラムにインデックスを作成してみる

Posted at

インデックス作成

まず、MySQLで下記のHOGEテーブルのHOGEカラムにインデックスを作成してみます。

  • HOGEテーブル

| hoge  | CREATE TABLE `hoge` (
  `ID` int(11) NOT NULL,
  `HOGE` text NOT NULL,
  `VERSION` int(11) NOT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
  • インデックス作成用SQL

# ALTER TABLE HOGE ADD INDEX hoge_idx(HOGE);

エラー発生

インデックスを張ろうとしたところ、下記のようなエラーが発生。


mysql> ALTER TABLE HOGE ADD INDEX hoge_idx(HOGE);
ERROR 1170 (42000): BLOB/TEXT column 'HOGE' used in key specification without a key length

このエラーは、MySQLがBLOB型もしくはTEXT型(これらに順ずるTINYTEXT型やLONGTEXT型を含む)のような可変長カラムでは、その先頭から最大255文字分しかインデックスできないという制約から来ているようです。

解決策

BLOB型またはTEXT型の場合は、インデックス作成時にキー長を明示してあげる必要があります。

# ALTER TABLE HOGE ADD INDEX hoge_idx(HOGE(255));

 
以上、TEXT型のカラムにインデックスを追加しようとした時に躓いた内容でした。

73
51
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
73
51

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?