【问题标题】:Index column size too large. The maximum column size is 767 bytes. - For INT datatype?索引列大小太大。最大列大小为 767 字节。 - 对于 INT 数据类型?
【发布时间】: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 个字节。

标签: mysql innodb


【解决方案1】:

有点晚了,但我遇到了类似的问题。

您的 tag_text 列有一个 UNIQUE_INDEX,这就是导致问题的原因,而不是 INT 数据类型。

通过启用 innodb_large_prefix 设置更改您的 MySql 安装以启用更大的索引列。

http://dev.mysql.com/doc/refman/5.5/en/innodb-restrictions.html

【讨论】:

  • 您可能还需要将特定表格的行格式更改为 DYNAMIC。
  • 谢谢,这是一个很大的帮助。太多的 Unque_index 约束为我抛出了这个错误。
猜你喜欢
  • 2021-07-16
  • 1970-01-01
  • 1970-01-01
  • 2015-08-26
  • 2019-10-12
  • 2016-01-06
  • 2018-01-14
  • 1970-01-01
相关资源
最近更新 更多