テーブルのカラム名をkey
という名前で定義していて、そのカラムにINDEXを貼ろうとして2時間ぐらいハマった。
crt_configs.sql
CREATE TABLE `configs` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`key` varchar(255) NOT NULL,
`value` text,
`note` text,
PRIMARY KEY(`id`),
INDEX idx_configs_key(key(255))
) ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Syntaxエラー
ERROR 1064 (42000) at line 4 in file: 'path/crt_configs.sql': You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'key(255))
) ENGINE= INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci' at line 7
解決法
key
はMySQLの予約語として既に存在するので、バッククォートで囲んでやらなければいけない。
crt_configs.sql
CREATE TABLE `configs` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`key` varchar(255) NOT NULL,
`value` text,
`note` text,
PRIMARY KEY(`id`),
INDEX idx_configs_key(`key`(255)) # key -> `key` (バッククォートで囲む)
) ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;