gpt4 book ai didi

MySQL 错误 : key specification without a key length

转载 作者:IT老高 更新时间:2023-10-28 12:47:49 36 4
gpt4 key购买 nike

我有一个主键是 varchar(255) 的表。在某些情况下,255 个字符是不够的。我尝试将字段更改为文本,但出现以下错误:

BLOB/TEXT column 'message_id' used in key specification without a key length

我该如何解决这个问题?

编辑:我还应该指出这个表有一个多列的复合主键。

最佳答案

发生错误是因为 MySQL 只能索引 BLOB 或 TEXT 列的前 N ​​个字符。所以错误主要发生在有 TEXT 或 BLOB 的字段/列类型或属于 TEXTBLOB 类型的字段/列类型,例如 TINYBLOBMEDIUMBLOBLONGBLOBTINYTEXTMEDIUMTEXTLONGTEXT 。完整的 BLOBTEXT 没有长度值,MySQL 无法保证列的唯一性,因为它是可变和动态大小的。因此,当使用 BLOBTEXT 类型作为索引时,必须提供 N 的值,以便 MySQL 可以确定键长度。但是,MySQL 不支持 TEXTBLOB 的 key 长度限制。 TEXT(88) 根本行不通。

当您尝试从non-TEXTnon-BLOB类型如VARCHAR转换表格列时也会弹出错误并将 ENUM 转换为 TEXTBLOB 类型,其中列已被定义为唯一约束或索引。 Alter Table SQL 命令将失败。

解决问题的方法是从索引或唯一性约束中删除TEXTBLOB 列或将另一个字段设置为主键。如果您不能这样做,并且想要对 TEXTBLOB 列进行限制,请尝试使用 VARCHAR 类型并放置一个长度限制。默认情况下,VARCHAR 限制为最多 255 个字符,并且必须在声明后的括号内隐式指定其限制,即 VARCHAR(200) 将其限制为仅限 200 个字符。

有时,即使您没有在表中使用 TEXTBLOB 相关类型,也可能会出现错误 1170。它发生在您将 VARCHAR 列指定为主键,但错误地设置其长度或字符大小的情况下。 VARCHAR 最多只能接受 256 个字符,因此诸如 VARCHAR(512) 之类的任何内容都会强制 MySQL 自动转换 VARCHAR(512)SMALLTEXT 数据类型,如果该列用作主键或唯一或非唯一索引,则该数据类型随后会失败,并在键长度上出现错误 1170。要解决此问题,请将小于 256 的数字指定为 VARCHAR 字段的大小。

引用: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/1827063/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com