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

2024-01-18

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

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

我怎样才能解决这个问题?

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


发生该错误的原因是 MySQL 只能索引 BLOB 的前 N ​​个字符或TEXT柱子。所以错误主要发生在字段/列类型为TEXT或 BLOB 或属于TEXT or BLOB类型如TINYBLOB, MEDIUMBLOB, LONGBLOB, TINYTEXT, MEDIUMTEXT, and LONGTEXT您尝试创建主键或索引。与满BLOB or TEXT如果没有长度值,MySQL 无法保证列的唯一性,因为它的大小是可变的和动态的。所以,当使用BLOB or TEXT类型作为索引,必须提供 N 的值,以便 MySQL 可以确定键长度。但是,MySQL 不支持密钥长度限制TEXT or BLOB. TEXT(88)根本行不通。

当您尝试将表列从non-TEXT and non-BLOB类型如VARCHAR and ENUM into TEXT or BLOB类型,列已定义为唯一约束或索引。 Alter Table SQL 命令将失败。

解决问题的方法是删除TEXT or BLOB索引或唯一约束中的列或将另一个字段设置为主键。如果你做不到这一点,并且想要限制TEXT or BLOB列,尝试使用VARCHAR键入并对其设置长度限制。默认情况下,VARCHAR限制为最多 255 个字符,并且其限制必须在声明后的括号内隐式指定,即VARCHAR(200)将其长度限制为 200 个字符。

有时,即使你不使用TEXT or BLOB表中的相关类型,也可能会出现错误 1170。它发生在诸如当您指定的情况下VARCHAR列作为主键,但错误地设置了其长度或字符大小。VARCHAR最多只能接受 256 个字符,因此诸如VARCHAR(512)将强制 MySQL 自动转换VARCHAR(512) to a SMALLTEXTdatatype,如果该列用作主键或唯一或非唯一索引,则随后会失败并出现键长度错误 1170。为了解决这个问题,指定一个小于256的数字作为大小VARCHAR field.

参考:MySQL 错误 1170 (42000):在没有密钥长度的密钥规范中使用 BLOB/TEXT 列 https://web.archive.org/web/20071012020606/http://www.mydigitallife.info/2007/07/09/mysql-error-1170-42000-blobtext-column-used-in-key-specification-without-a-key-length/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL 错误:没有密钥长度的密钥规范 的相关文章

  • 我不断收到错误“关系 [TABLE] 不存在”

    我一直在尝试查询数据库中的两个表 在服务器资源管理器中 我可以看到两个表 甚至可以看到其中的列 我们将它们称为 Schema table1 和 Schema table2 其中 Schema 的第一个字母大写 我尝试运行以下查询 selec
  • 从Django中具有外键关系的两个表中检索数据? [复制]

    这个问题在这里已经有答案了 This is my models py file from django db import models class Author models Model first name models CharFie
  • 通过触发器应用表的列权限

    现在 我有一个名为 Members 的表 其中包含内容 分为联系人数据 银行数据 现在 管理员应该能够创建 更新 删除用户 这些用户保存在另一个表中 该表只能访问管理员 用户应该获得自己的 mysql 用户帐户 管理员还应该能够设置权限 例
  • 在 DataView 的 RowFilter 中选择 DISTINCT

    我试图根据与另一个表的关系缩小 DataView 中的行范围 我使用的 RowFilter 如下 dv new DataView myDS myTable id IN SELECT DISTINCT parentID FROM myOthe
  • SQL 最近日期

    我需要在 php 中获取诸如 2010 04 27 之类的日期作为字符串 并在表中找到最近的 5 个日期 表中的日期保存为日期类型 您可以使用DATEDIFF http dev mysql com doc refman 5 1 en dat
  • 内部 while 循环不工作

    这是我项目网页上的代码片段 这里我想显示用户选择的类别 然后想显示属于该类别的主题 在那里 用户可以拥有多个类别 这没有问题 我可以在第一个 while 循环中打印所有这些类别 问题是当我尝试打印主题时 结果只显示一行 但每个类别中有更多主
  • 如何部署“SQL Server Express + EF”应用程序

    这是我第一次部署使用 SQL Server Express 数据库的应用程序 我首先使用实体 框架模型来联系数据库 我使用 Install Shield 创建了一个安装向导来安装应用程序 这些是我在目标计算机中安装应用程序所执行的步骤 安装
  • 从前端更改记录顺序

    我在编写下一个功能时遇到问题 我希望用户能够重新排列记录并更改 display order 值 我使用 Jquery UI 的可拖放功能来促进这一点 我可以看到如何简单地交换 display order 值 但我想为一条记录设置一个显示顺序
  • MySQL 与 PostgreSQL JSON 搜索功能

    我一直在寻找一篇博客文章或一个功能矩阵 通过 JSON 功能对 MySQL 和 PostgreSQL 进行比较 我找到了一个好的Postgres 的特征矩阵 https www postgresql org about featuremat
  • 基于多个表的数据更新单个表 SQL Server 2005,2008

    我需要更新表one使用表中的数据two 表一和表二没有任何公共列相关 桌子three与表相关two 例如 表一 reg det 表 reg det id reg id results 101 11 344 表二 临时表 venue resu
  • 删除连接中不存在的记录

    想象两个表 A 和 B A B 1 2 2 3 6 5 4 7 9 11 13 23 9 现在我想从 A 中删除 B 中不存在的记录 例如从 A 中删除 1 6 和 4 我最初的想法是您可以 否定 联接的结果 DELETE FROM A W
  • 加载“mysql2”Active Record 适配器时出错

    我正在尝试升级我的应用程序 这是我在部署应用程序时遇到的错误 加载 mysql2 Active Record 适配器时出错 缺少它所依赖的宝石 无法激活mysql2 0 4 4 已经激活mysql2 0 3 21 确保所有依赖项都添加到 G
  • WHERE 值不在(子查询)

    我一直在努力解决这个问题 我有两张桌子 一张带有优惠券和发票号码的 一张带有发票号码和客户姓名的 我需要找到尚未使用优惠券的顾客 以下是表格 促销表 Promotions Invoice Coupon 1 couponA 2 couponB
  • Big Query - 将数组/json 对象转置为列

    这个问题是这两个问题的延续 Bigquery 将数组转置为列 https stackoverflow com q 64346504 7463780 大查询 将特定字段转置为列 https stackoverflow com q 643983
  • 查询和扫描多行性能缓慢

    下面的查询一行的执行时间为 6 18 分钟 Exception type 1 的基数值为 3 我不知道如何提高性能 Query select count 1 as rage tap from summary funnel 1066 s jo
  • 如何将逗号分隔的列值与另一个表作为行连接

    我试图通过首先转换我正在成功执行的 SupplierId 列中的逗号分隔值来连接两个表 然而 当我尝试通过外键 DCLink 加入另一个带有供应商名称的表 Vendors 时 问题就出现了 这就是我的意思 原始表的 select 语句 SE
  • 如何使用 Connector/C++ 更新 MySQL 中的一行值

    我有一个简单的数据库 想要更新一个 int 值 我最初执行一个查询并返回一个 ResultSet sql ResultSet 对于结果集中的每个条目 我想修改表的一个特定列中的值 然后将其写回到数据库 更新该行中的该条目 根据文档 我不清楚
  • Tomcat JDBC 池中没有足够的空闲连接

    给定以下 Tomcat JDBC 连接设置
  • 可空数据类型与非空 varchar 数据类型 - 哪个查询速度更快?

    我们通常更愿意拥有我们所有的varchar nvarchar列不可为空使用空字符串 作为默认值 团队中有人建议nullable更好 因为 像这样的查询 Select From MyTable Where MyColumn IS NOT NU
  • 在查询中创建临时变量

    我希望能够在查询中创建一个临时变量 而不是存储过程或函数 它不需要声明和设置 这样我在调用它时就不需要传递查询参数 正在努力朝这个方向努力 Select field1 tempvariable 2 2 newlycreatedfield t

随机推荐

  • r - xpathApply 于 XMLNodeSet(带有 XML 包)

    我正在尝试使用 R 中的 XML 包中的 xpathApply 函数从 html 文件中提取某些数据 但是 当我在 html 文档的某些父节点上使用 xpathApply 后 生成的对象的类变为 XMLNodeSet 并且我无法在此类对象上
  • Slick 3:如何通过事务实现存储库模式?

    在我的 Play Framework 2 5 应用程序中 我需要为服务编写单元测试 我需要隔离数据访问逻辑 以便能够单独测试服务层 为此 我想创建存储库接口并在单元测试中模拟它们 class UserService def signUpNe
  • 只有 BooleanField 的 Django 表单

    我对 Django 相当陌生 我正在使用 Django 1 0 我有这个 形式 py class MyForm forms Form extra cheeze forms BooleanField required False initia
  • Pyarrow s3fs 按时间戳分区

    是否可以在中使用时间戳字段pyarrow表进行分区s3fs文件系统由 YYYY MM DD HH 将镶木地板文件写入时s3 我能够使用 pyarrow write to dataset 函数来实现 该函数允许您指定分区列来创建子目录 Exa
  • “闭包”和“块”到底有什么区别?

    我发现很多人都用这个词closure and block可以互换 这些人中的大多数无法解释他们在说什么 一些 Java 程序员 甚至是来自非常昂贵的咨询公司的程序员 将匿名内部类称为 块 和 闭包 但我知道这不是真的 您不能从定义可变变量的
  • MediaStore 中的 BUCKET_ID 是什么?

    我正在浏览一些查询 MediaStore Images 内容提供程序并使用名为 BUCKET ID 的列的代码 Uri uri MediaStore Images Media EXTERNAL CONTENT URI String proj
  • Java - 实现忙等待机制

    在我的项目中 到目前为止我已经 同步 了多个线程 每个线程都运行相同类型的Runnable 用一个CyclicBarrier http download oracle com javase 6 docs api java util conc
  • 如何在 iPhone 中从左到右设置动画视图?

    如何对从左到右的视图过渡进行动画处理 类似推送视图 当我单击按钮时 视图应该从左向右转换 所以请指导我并提供一些示例链接 Thanks 假设你想从右边推view2来替换view1 Set up view2 view2 frame view1
  • 缩短 NSString?

    我有一个非常简单的问题 是否有内置方法来缩短字符串 如果没有 有人可以提供一个这样做的例子ObjC 例如 这是一个很长的字符串 应该成为 这是AV 它需要检查字符串是否超过一定数量的字符以及是否被缩短 这非常简单 NSString orig
  • 使用行号进行 SQL 逆透视

    我有一个带有 UNPIVOT 的 SELECT 语句 SELECT dycd acnam dycd dynam dycd value FROM GCATT dbo tblDaycode UNPIVOT dycd value FOR dycd
  • 使用多个外部库时如何避免“重新定义”?

    我有两个库 第三方 并且在每个库中它们都定义了两个具有相同名称的类 在头文件中 Lib A HeaderA h struct mycompare Some code Lib B HeaderB h struct mycompare Same
  • Laravel 未发布到 Redis

    我正在尝试在本地 RESTful API 中实现 Redis 发布 该 API 是在 Laravel 中构建的 以便稍后使用 Web Sockets 实现聊天系统 我打算稍后从 Node JS 服务器读取它们 我在用Redis publis
  • Bamboo - Angular 4 应用程序如何部署

    如何在竹子上部署我的 Angular 4 应用程序 我只是做一个简单的工作 1 git 2 npm install 3 ng build 顺利通过了 但是接下来我应该做什么呢 如何将其部署在服务器上 以便我可以从浏览器进入应用程序 我尝试将
  • 使用索引优化MYSQL数据库[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我正在研究学习商务模拟 http www learnbizsimulations com 一家自筹资金的初创公司 为管理教育领域进行模拟 a 我们的网
  • 应用程序清单文件在 Win 7 环境中导致问题

    我的应用程序已从 net 1 1 升级到 3 5 在 win 7 64 位环境中 我必须手动删除 app exe manifest 文件 否则启动时会崩溃 我使用 Visual Studio 部署和设置项目进行安装 在exe的应用程序设置本
  • 使用 jquery 按值更改/修改下拉列表文本

    我有带有值的下拉列表
  • 如何在 TypeScript 项目中导入节点模块。 ERR_REQUIRE_ESM

    我正在尝试将包 p limit 导入到我的打字稿项目中 当尝试使用运行项目时tsc node serve js 我遇到了下面的错误 我已经被困在这个问题上几个小时了 Error ERR REQUIRE ESM Must use import
  • pm2 可以运行“npm start”脚本吗

    pm2 有没有办法运行 npm start 脚本 或者你只需 要运行pm2 start app js 所以在开发中 npm start 然后在生产中使用 pm2 你会运行类似的东西 pm2 start npm start 有一个等效的方法可
  • android sqlite异常:java.lang.IllegalArgumentException:列'_id'不存在

    我创建了一个包含以下列的 sqlite 数据库 static final String dbName demoDB static final String tableName Employees static final String co
  • MySQL 错误:没有密钥长度的密钥规范

    我有一个主键为 varchar 255 的表 在某些情况下 255 个字符是不够的 我尝试将字段更改为文本 但出现以下错误 BLOB TEXT column message id used in key specification with