- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个主键为 varchar(255) 的表。在某些情况下,255 个字符是不够的。我尝试将字段更改为文本,但出现以下错误:
BLOB/TEXT column 'message_id' used in key specification without a key length
我该如何解决这个问题?
编辑:我还应该指出该表有一个包含多个列的复合主键。
最佳答案
发生此错误的原因是 MySQL 只能索引 BLOB 或 TEXT
列的前 N 个字符。因此,该错误主要发生在存在 TEXT
或 BLOB 类型的字段/列或属于 TEXT
或 BLOB
类型(例如 >TINYBLOB
、MEDIUMBLOB
、LONGBLOB
、TINYTEXT
、MEDIUMTEXT
和 LONGTEXT
code> 您尝试创建主键或索引。对于没有长度值的完整BLOB
或TEXT
,MySQL无法保证列的唯一性,因为它的大小是可变的和动态的。因此,当使用BLOB
或TEXT
类型作为索引时,必须提供N的值,以便MySQL可以确定键长度。但是,MySQL 不支持 TEXT
或 BLOB
的 key 长度限制。 TEXT(88)
根本行不通。
当您尝试将表列从非TEXT
和非BLOB
类型(例如VARCHAR
)转换时,也会弹出该错误和 ENUM
转换为 TEXT
或 BLOB
类型,其中列已定义为唯一约束或索引。 Alter Table SQL 命令将失败。
问题的解决方案是从索引或唯一约束中删除 TEXT
或 BLOB
列,或者将其他字段设置为主键。如果您无法做到这一点,并且想要对 TEXT
或 BLOB
列施加限制,请尝试使用 VARCHAR
类型并放置一个其长度限制。默认情况下,VARCHAR
的最大长度限制为 255 个字符,并且必须在声明后的方括号内隐式指定其限制,即 VARCHAR(200)
将其限制为仅 200 个字符长。
有时,即使您在表中没有使用 TEXT
或 BLOB
相关类型,也可能会出现错误 1170。它发生在以下情况:您指定 VARCHAR
列作为主键,但错误地设置了其长度或字符大小。 VARCHAR
最多只能接受 256 个字符,因此诸如 VARCHAR(512)
之类的任何内容都会强制 MySQL 自动转换 VARCHAR(512)
转换为 SMALLTEXT
数据类型,如果该列用作主键或唯一或非唯一索引,该数据类型随后会失败并出现键长度错误 1170。要解决此问题,请将 VARCHAR
字段的大小指定为小于 256 的数字。
引用:MySQL Error 1170 (42000): BLOB/TEXT Column Used in Key Specification Without a Key Length
关于MySQL错误: key specification without a key length,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37140620/
我是一名优秀的程序员,十分优秀!