mysql出错提示“BLOB/TEXT column used in key specification without a key length”解决办法

一、问题

pandas对象将DataFrame数据保存到mysql中时,出现错误提示:
  BLOB/TEXT column used in key specification without a key length

或者

在MySQL数据库中,当MySQL创建新表或者更改已存在表,这个表存在主键,并且是unique唯一性约束和索引约束时,或者是在定义一个索引来更改数据表的text字段操作语句的时候,下面的错误信息很可能会出现,并且经过当前操作命令的完成。错误信息为BLOB或者TEXT字段使用了未指定键值长度的键,发生了这样的错误:BLOB/TEXT column 'name' used in key specification without a key length。

查阅资料后才知道,原来Mysql数据库对于BLOB/TEXT这样类型的数据结构只能索引前N个字符。所以这样的数据类型不能作为主键,也不能是UNIQUE的。所以要换成VARCHAR,但是VARCHAR类型的大小也不能大于255,当VARCHAR类型的字段大小如果大于255的时候也会转换成小的TEXT来处理。所以也同样有问题。

此外,因为MySQL只能将BLOB/TEXT类型字段设置索引为BLOB/TEXT数据的钱N个字符,因此错误常常发生在字段被定义为TEXT/BLOB类型或者和TEXT/BLOB同质的数据类型,如TINYTEXT,MEDIUMTEXT,LONGTEXT ,TINYBLOB,MEDIUMBLOB 和LONGBLOB,并且当前操作是将这个字段设置成主键或者是索引的操作。在未指定TEXT/BLOB‘键长’的情况下,字段是变动的并且是动态的大小所以MySQL不能够保证字段的唯一性。因此当使用TEXT/BLOB类型字段做为索引时,N的值必须提供出来才可以让MySQL决定键长,但是MySQL不支持在TEXT/BLOB限制,TEXT(88)是不行的。

当你试图将数据表中的一个非TEXT或者非BLOB类型如VARCHAR或ENUM的字段转换成TEXT/BLOB,同时这个字段已经被定义了unique限制或者是索引,这个错误也会弹出,并且更改数据表的命令会执行失败

二、原因

出问题的原因是DataFrame对象索引的数据类型是TEXT/BLOB或其从属的类型,当将其作为mysql中的主键的时候,如果这些数据类型缺少明确的长度值,mysql无法保证主键的唯一性,因为这个主键是一个变量,其长度是动态的。所以当使用 TEXT/BLOB类型的数据作为索引的时候,数据的长度必须提供给mysql,使其能够明确键的长度。但是mysql不支持对TEXT/BLOB长度的限制。

同样的错误也会出现在试图将非TEXT/BLOB类型的数据列转换成TEXT/BLOB类型,这些列被定义成独立的索引。AlterTable命令会失效。

三、解决方法

解决方案是将unique限制和索引从TEXT/BLOB字段中移除,或者是设置另一个字段为主键。如果不得不设置成主键,而想限制TEXT/BLOB的长度,可以尝试使用VARCHAR并设置其长度。VARCHAR默认长度是255个字符,并且其长度必须在其声明之后的右边括号中设置,例如,VARCHAR(200)将其设置成200个字符长度。

有时候,即使你在数据表中不使用TEXT/BLOB类型或者同质类型,error1170 也会出现,这个问题出现在当你设置一个VARCHAR字段为主键,但是却错误的设置了长度或者字符数,事实上,VARCHAR只能接受最大为256个字符串,但是你错误的设置成VARCHAR(512)等一些错误的设置,这些错误的设置会强制MySQL自动将VARCHAR(512)等转换成SMALLINT类型,同时这个字段被设置成primary key ,unique限制或者index索引等,然后执行操作就出现error 1170错误,解决问题的方法,为VARCHAR域指定小于256的长度。

mysql #1170错误(42000) BLOB/TEXT Column Used in Key Specification Without a Key Length

将DataFrame数据输出到mysql时强制将索引转换成VARCHAR并限制其长度,其中的code是索引的标签:

1 data.to_sql('data',engine,if_exists='replace',dtype={'code':VARCHAR(data.index.get_level_values('code').str.len().max())})

参考:https://www.cnblogs.com/zhangjpn/p/6133793.html

https://blog.csdn.net/u012069924/article/details/28858337

操作MySQL出错提示“BLOB/TEXT column used in key specification without a key length”解决办法相关推荐

  1. pandas对象保存到mysql出错提示“BLOB/TEXT column used in key specification without a key length”解决办法

    问题 将DataFrame数据保存到mysql中时,出现错误提示: BLOB/TEXT column used in key specification without a key length 原因 ...

  2. 1170 - BLOB/TEXT column 'CustomerName' used in key specification without a key length

    [DTF] Data Transfer 企管宝_2_CRM start [DTF] Getting tables [DTF] Analyzing table: `CustomerInfo` [DTF] ...

  3. Django Migration Error with MySQL: BLOB/TEXT column *** used in key specification without a key leng

    Django Migration Error with MySQL: BLOB/TEXT column *** used in key specification without a key leng ...

  4. mysql blob key length_mysql提示used in key specification without a key length

    今天最火软件站小编在写一个PHP小东西的时候遇到了一个问题,设计数据库类型的时候提示:xxxx used in key specification without a key length,百思不得其 ...

  5. BLOB/TEXT column ‘sup_content‘ used in key specification without a key length

    1.问题 mysql数据建表使用了longtext并且给了对应的索引导致以下错误: BLOB/TEXT column 'sup_content' used in key specification w ...

  6. 解决BLOB/TEXT column can‘t have a default value query问题

    解决BLOB/TEXT column can't have a default value query问题 参考文章: (1)解决BLOB/TEXT column can't have a defau ...

  7. .net core 1.1 mysql_Asp.net Core 1.1 升级后操作mysql出错的解决办法

    这篇文章主要介绍了Asp.net Core 1.1 升级后操作mysql出错的解决办法,需要的朋友可以参考下 遇到问题 core的版本从1.0升级到1.1,操作mysql数据库,查询数据时遇到Miss ...

  8. Linux操作提示:“Cant open file for writing”或“operation not permitted”的解决办法

    Linux操作提示:"Cant open file for writing"或"operation not permitted"的解决办法 在Linux上使用v ...

  9. Sublime Text 2报 Decode error - output not utf-8 错误的解决办法

    Sublime Text 2报"Decode error - output not utf-8"错误的解决办法 作者:chszs,转载需注明. 作者博客主页:http://blog ...

  10. 电脑摄像头未能创建连接服务器,电脑提示未能创建视频预览,请检查设备连接的原因及解决办法...

    电脑提示"未能创建视频预览,请检查设备连接"的原因及解决办法 发布时间:2012-05-29 10:49:26   作者:佚名   我要评论 不知道大家有没有遇到这样的情况,当打开 ...

最新文章

  1. 19.1 Linux监控平台介绍;19.2 zabbix监控介绍;19.3,19.4 安装zabbi
  2. 开发日记-20190703 关键词 读书笔记《Linux 系统管理技术手册(第二版)》DAY 9
  3. 使用增强型后缀数组(ESA)的文本匹配算法
  4. JSP的session处理
  5. 电脑开机动画_领克的开机画面,你修改了?
  6. Redis多实例及主从搭建
  7. jquery扩张函数
  8. P2900-[USACO08MAR]Land AcquisitionG【斜率优化】
  9. C++ 一篇文章让你知道智能指针的魅力
  10. 力扣199. 二叉树的右视图(JavaScript)
  11. c++多边形扫描线填充算法_基于MATLAB的道格拉斯普克算法递归实现
  12. Java Map在遍历过程中删除元素
  13. C# JPG转PDF
  14. 计算机无法识别psp usb设备,PSP降级导致USB连接电脑识别问题解决办法
  15. parse_url() vul
  16. 论文阅读:Permutation Matters: Anisotropic Convolutional Layer for Learning on Point Clouds
  17. 评估 OKRs 的最佳频率是什么?
  18. 【设计模式学习笔记】类图:类与类之间的关系
  19. ITIL,是否已是昨日黄花
  20. java报销系统的参考文献_java毕业设计_springboot框架的企业报销管理与实现

热门文章

  1. SpringBoot GA/PRE/SNAPSHOT含义
  2. 安卓投屏传输手机声音到电脑最简单的方式
  3. ecshop模板如何修改详细图解
  4. 编程语言介绍以及特点
  5. 第四百九十一章 战利品
  6. 360安全卫士团队版or企业版卸载
  7. Qt5 QFileDialog中文英文交界处乱码问题
  8. PLC1200 模拟量采集
  9. 微信小程序:uu传书
  10. bzoj 1853: [Scoi2010]幸运数字 容斥