您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

MySQL错误:没有密钥长度的密钥规范

MySQL错误:没有密钥长度的密钥规范

发生错误是因为MysqL只能索引BLOB或TEXT列的前N个字符。所以错误主要发生时,有一个领域/列类型TEXT或BLOB或那些属于TEXTBLOB类型,如TINYBLOBMEDIUMBLOBLONGBLOBTINYTEXTMEDIUMTEXT,和LONGTEXT您尝试使一个主键或索引。无论长度是完整的BLOB还是TEXT没有长度的,MysqL都无法保证列的唯一性,因为它具有可变大小和动态大小。因此,当使用BLOBorTEXT类型作为索引时,必须提供N的值,以便MysqL可以确定键的长度。但是,MysqL不支持TEXT或上的密钥长度限制BLOBTEXT(88)根本行不通。

当您尝试将表列从non-TEXTnon- BLOB类型(如VARCHARENUM转换为TEXTBLOB类型)转换为错误,并且该列已被定义为唯一约束或索引时,也会弹出该错误。Alter Table sql命令将失败。

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

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

参考:MySQL错误1170(42000):键规范中使用的BLOB / TEXT列没有键长

MySQL 2022/1/1 18:14:47 有523人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶