MySQL ERROR 1170错误:BLOB/TEXT column used in key specification without a key length

A kitten
蒋川
B 端产品经理,卡拉云联合创始人
阅读时长 1 分钟

MySQL ERROR 1170错误:BLOB/TEXT column used in key specification without a key length

在MySQL数据库中,当我们创建新表或者更改一个已有主键的表,并且是 unique 唯一性约束和索引约束时,或用 Alter Table 操作语句定义一个新的索引时,MySQL 可能会出现 ERROR 1170。

ERROR 1170 (42000): BLOB/TEXT column ‘field_name’ used in key specification without a key length

1170 错误的原因是因为 MySQL 只能索引 BLOBTEXT 字段的前 N 个字符。因此这个错误主要发生在 TEXTBLOB 类型的字段或一些属于 TEXTBLOB 类型的字段中,比如 TINYTEXTMEDIUMTEXTLONGTEXTTINYBLOBMEDIUMBLOBLONGBLOB 这些类型中。

当我们开始对以上这些类型的字段设置成主键或者进行 index 索引时,会出现这种错误。

对于未指定 BLOB / TEXT「键长」的情况下,MySQL 无法保证字段的唯一性,因为它们是动态的,可变化的。因此,当使用 BLOB / TEXT 类型作为索引时,必须提供 N 的值,以便 MySQL 能够确定键的长度。但是 MySQL 不支持对 BLOB / TEXT 的限制。TEXT(77) 这么设置是不行的。

当你尝试把非 BLOB / TEXT 类型的字段(比如 VARCHARENUM)转换成 BLOB / TEXT 类型,同时定义这个字段为 Unique 限制或 index 索引时。MySQL 也会报 1170 错误。执行的这条更改 SQL 也会操作失败。

错误 1170 的解决方案是将 Unique 限制或者 index 索引从 BLOB / TEXT字段中移除,或设置另一个字段作为主键。如果你出于某种原因不能这样做,又想给 BLOB / TEXT 字段加个限制,那么你可以尝试把这个字段改为 VARCHAR 类型,并给它一个长度限制。默认情况下,VARCHAR 最大限制为 255 个字符,比如 VARCHAR(150) 会限制长度为 150 字符。

有时,即使你在表中没有使用 BLOB / TEXT 相关类型,也可能出现 MySQL 1170 错误。这个问题出现在当你设置一个 VARCHAR 字段为主键,但是却错误的设置了长度或者字符数。VARCHAR 数据类型只能接受最大为 256 个字符,假设你错误的将 VARCHAR(512) 设置成 512,那么这个超范围的 VARCHAR 类型会被 MySQL 直接转换成 SMALLINT 类型,如果这之后,你把这个出错的字段设置成主键,Unique 或者 index 的话,那么在操作过程中 MySQL 就会报 1170 错误。解决方法就是把 VARCHAR 类型设置成小于 256 长度即可。

最后顺便推荐一下我和小伙伴一起开发的卡拉云。只要你会写 SQL 无需会任何前端,也可以快速搭建后台管理工具,比如用户权限管理系统、销售管理系统、学生信息系统、财务对账系统,还可以搭建一套属于自己的数据查询看板,一键分享给协作组的同学使用,再也不用担心自己沦为人肉查询机。

使用卡拉云轻松搭建企业内部工具

卡拉云不仅可以像命令行一样灵活,还可根据自己的工作流,定制开发。无需繁琐的前端开发,只需要简单拖拽,即可快速搭建企业内部工具。数月的开发工作量,使用卡拉云后可缩减至数天,欢迎免费试用卡拉云

卡拉云可一键接入常见的数据库及 API

卡拉云可快速接入的常见数据库及 API,可根据公司工作流需求,轻松搭建数据看板,并且可分享给组内的小伙伴共享数据,仅需拖拽一键生成前端代码,简单一行代码即可映射数据到指定组件中。

搭建数据看板,直接导出数据

卡拉云可直接添加导出按钮,导出适用于各类分析软件的数据格式,方便快捷。

下图为使用卡拉云在 5 分钟内搭建的「优惠券发放核销」后台,仅需要简单拖拽即可快速生成前端组件,只要会写 SQL,便可搭建一套趁手的数据库工具。

使用卡拉云在 5 分钟内搭建的「优惠券发放核销」后台

立即开通卡拉云,搭建属于自己的数据后台工具吧。

更多数据库相关教程可访问 卡拉云 查看。如果你还有什么疑问,欢迎一起讨论。我的微信 HiJiangChuan。

有关 MySQL 教程,可继续拓展学习:

© 2021 卡拉云 Built with ❤️ in Beijing

京ICP备15049164号-9