【发布时间】:2014-07-20 18:57:26
【问题描述】:
我知道 innodb 对密钥大小施加了限制,但是 INT?
CREATE TABLE IF NOT EXISTS `db`.`TAGS` (
`tag_id` INT( 11 ) NOT NULL ,
`tag_text` VARCHAR( 700 ) NULL ,
`date_added` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,
`xxx_id` INT( 11 ) NOT NULL COMMENT 'This is for ease of reference lookup later',
`user_id` INT( 11 ) NOT NULL ,
`TAG_FACT_RELATION_relation_id` INT NOT NULL ,
PRIMARY KEY ( `tag_id` ) ,
UNIQUE INDEX `tag_UNIQUE` ( `tag_text` ASC ) ,
UNIQUE INDEX `tag_id_UNIQUE` ( `tag_id` ASC ) ,
INDEX `fk_TAGS_TAG_FACT_RELATION1_idx` ( `TAG_FACT_RELATION_relation_id` ASC ) ,
CONSTRAINT `fk_TAGS_TAG_FACT_RELATION1` FOREIGN KEY ( `TAG_FACT_RELATION_relation_id` ) REFERENCES `meepl`.`TAG_FACT_RELATION` (
`relation_id`
) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE = INNODB;
有错误说:
#1709 - Index column size too large. The maximum column size is 767 bytes.
有什么想法吗?多年来,我一直在研究数据类型。
【问题讨论】:
-
tag_text怎么样 -
除了@juergend 以下是 CREATE INDEX 手册的摘录:注意前缀限制以字节为单位,而 CREATE INDEX 语句中的前缀长度被解释为非二进制数据的字符数类型(CHAR、VARCHAR、TEXT)。在为使用多字节字符集的列指定前缀长度时,请考虑到这一点。
-
谢谢,是的,它看起来像 tag_text。如何在不让我 VARCHAR(100) 的情况下解决这个问题?我应该将其作为索引删除吗?
-
您可以设置前缀长度,即
UNIQUE INDEX tag_UNIQUE ( tag_text (150) ), ...列的前 150 个字符必须是唯一的,这可能需要最多 600 个字节。