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

python django(1170, "BLOB/TEXT column 'name' used in key specification without a key length) 今天,在给django建模型(表)的时候,报django.db.utils.InternalError: (1170, “BLOB/TEXT column ‘name’ used in key specification without a key length”)错误 这是因为mysql为BLOB或者TEXT字段使用了未指定键值长度的键 但是改了模型也无法解决 `class User(mode... 阅读详情
AI摘要

本文详细解析了在MySQL数据库操作中常见的错误1170,即BLOB/TEXT字段在键规范中未指定键长度的问题。文章阐述了错误出现的原因,包括在创建或修改表时对BLOB/TEXT字段的不当使用,以及在将DataFrame数据保存至MySQL时的常见陷阱。提供了几种解决方案,如移除unique限制、改变字段类型为VARCHAR并设置长度,以及如何正确地将DataFrame数据转换为适合MySQL的格式。

[ERR] 12> 1170 - BLOB/TEXT column 'TABLE_OBJID' used in key specification without a key length

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.youkuaiyun.com/u012069924/article/details/28858337

遇到问题--python--"BLOB/TEXT column 'code' used in key specification without a key length 情况 使用python3使用SQLALchemy报错"BLOB/TEXT column ‘code’ used in key specification without a key length 代码如下: df = ts.get_stock_basics() #获取所有股票基本信息。 engine = create_engine('mysql://root:1234567890@127.0.0... 阅读详情

相关推荐

西门子S7-1200模拟量的使用

模块类型核心参数输入信号处理输出信号配置转换原理数值范围TIA Portal配置编程要点 转换公式: 输出模拟量: 五、校准与线性化 硬件校准非线性补偿抗干扰措施数字滤波温度控制压力监控流量调节信号异常精度不足实践操作参考文档项目案例借鉴博客

weixin_51020122的博客 4771

Mysql创建索引报“BLOB/TEXT column used in key specification without a key length“解决办法

MySQL针对BLOB/TEXT类型字段设置索引要指定长度

迎风悟极道的专栏 1万+

USRP X410 MPM版本与主机UHD版本不匹配问题记录与解决

至此大功告成!之前安装软件的坑算是填起来了,再次记录一下,希望能帮到有同样问题的小伙伴~

yanzuwu233的博客 1435

MySql 1170-BLOB/TEXT 错误

原因:由于将主键id设置为 text类型,所以导致主键 的长度,没有设置。解决方案:方案1:将主键id设置为varchar 类型的,设置对应的长度。方案2:如下图,点击后面的主键,在下方属性列设置id的长度即可保存。

mo_qi_qi的博客 4374

41页PPT | 华为业务流程架构全景视图:全业务域L1-L3级流程全案

TBD、收集和生成线索、验证机会点、TBD、管理销售授权、管理销售项目、管理销售项目群、管理合同要素/模板、验证和分发线索、标前引导、管理开票和回款、客户网络评估、管理销售评审、TBD、管理交付项目群、管理合同文档、管理结构化合同信息、跟踪和培育线索、制定并提交标书、管理合同/PO变更、客户网络规划、管理销售决策。:4.1 管理技术、服务请求、4.2管理备件、服务交付、4.3管理非技术、服务请求、4.4管理客户、投诉。:管理Idea、产生Idea、激发兴趣与协作、孵化、原型和验证、确认Idea与商业化。

zuoan1993的博客 4548

【笔记软件obsidian】从入门到精通

目录 一、前言 二、下载及安装 三、【选修】ios用户如何通过iCloud进行三平台同步 四、基本Markdown语法 五、【选修】插件的下载及安装方式 六、

patrick的博客 9万+

MySQL 报错:BLOB/TEXT column used in key specification without a key length

MySQL对BLOB/TEXT类型字段创建索引时,必须指定前缀长度,否则会报错"ERROR 1170"。这是因为大字段会严重影响性能,且MySQL需要确定索引的字符(字节)数。解决方案包括:添加前缀索引(推荐)、改用VARCHAR类型、创建全文索引或去除索引。最佳实践建议使用VARCHAR替代TEXT/BLOB,确需使用时应确保前缀索引区分度足够,或建立辅助摘要字段。这些措施能有效规避错误,提升数据库性能和维护性。

x² 1759

vscode配置matlab工作环境

前面有两篇文章我们分别讲了在vscode里面如何配置C语言环境和python环境,那两篇文章总体来说比较复杂,当然这篇也有许多有趣的问题。 附上链接: 文章目录matlab简介基本要求code runner插件与matlab相关的插件添加路径小结code runner是否支持更多语言更多选择另一个选择 matlab简介 MATLAB是美国MathWorks公司出品的商业数学软件,用于数据分析、无线通信、深度学习、图像处理与计算机视觉、信号处理、量化金融与风险管理、机器人,控制系统等领域。 MATLAB是ma

Cachel Wood的博客 4540

MySQL Error 1170 (42000): BLOB/TEXT Column Used in Key Specification Without a Key Length【转】

今天有开发反应他的建表语句错误,我看了下,提示: MySQL Error 1170 (42000): BLOB/TEXT Column Used in Key Specification Without a Key Length 原因是: MySQL不允许在BLOB/TEXT,TINYBLOB, MEDIUMBLOB, LONGBLOB, TINYTEXT, MEDIUMT...

weixin_30314631的博客 1050

智驾车载以太网(18)-switch之报文转发和vlan处理流程

本文详细解析了交换机中报文处理和转发流程:1)通过目标MAC查找转发端口,源MAC创建ARL条目;2)VLAN标签处理包括tagged/untagged帧判断、默认VID标记等5种处理方式;3)完整转发流程包含CRC校验、IQ封装、VLAN和ARL表查询、端口向量计算及优先级队列发送。文中还涉及TCAM修改VLAN、802.1q多种模式处理等细节,省略了流量控制等次要流程。该过程实现了基于MAC和VLAN的高效二层交换。

mitugaoyang1993的博客 43

智能车图像处理4-入门级分析3 ---十字路口补线

PS :入门级文章适合新手,如果已经有基础可以去看进阶篇文章。

taiyuezyh的博客 1万+

MySQL1170错误解决_mysql #1170错误(42000) BLOB/TEXT Column Used in Key Specification Without a Key Length...

mysql #1170错误(42000) BLOB/TEXT Column Used in Key Specification Without a Key Length一下是本人翻译国外的网站的解决方法When creating a new table or altering an existing table with primary key,unique constraints an...

weixin_35739967的博客 4431

github创建账号第一步始终出错

github创建账号总结:第一次注册GitHub,填好用户名邮箱密码后进入下一步就卡在哪里,上面还提示Unable to verify your captcha response等,进入网址的解决办法以及下载其他的浏览器也无法解决,用手机浏览器抱着试一试的心态竟然成功了,分享给大家。手机下载谷歌浏览器,进入GitHub正常注册,能向下继续,邮箱验证完以后再用电脑登陆就ok啦

计算机毕业论文源码,学生个人网页制作html源码。贴近用户做网络推广和互联网优化。 4376

MySQL数据库报" BLOB/TEXT column 'name' used in key specification without a key length "错误解决方法

问题 给查询高频率字段name添加索引报"BLOB/TEXT column 'name' used in key specification without a key length"错误 原因 出问题的原因是name对象索引的数据类型是TEXT/BLOB或其从属的类型,当将其作为mysql中的主键的时候,如果这些数据类型缺少明确的长度值,mysql无法保证主键的唯一性,因为这个主键是一个变...

swimming_sqp的博客 2801

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

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 原因 出问题的原因是DataFrame对象索引的数据类型是TEXT/BLOB或其从属的类型,当将其作为mysql中的主键的时候,如果这些数据类型缺少明确的长度值,mysql无法保证...

dinght2000的博客 650

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

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

BLOB/TEXT column 'name' used in key specification without a key length原因: 今天在写mysql建表语句的时候,发生了这样的错误:BLOB/TEXT column 'name' used in key specification without a key length。查阅资料后才知道,原来Mysql数据库对于BLOB/TE...

小强博客 3350

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

mysql 1170_MySQL Error 1170 (42000): BLOB/TEXT Column Used in Key Specification Without a Key Length

When creating a new table or altering an existing table with primary keys, unique constraints and indexes, or when defining a new index with Alter Table manipulation statement in MySQL database, the f...

weixin_39943547的博客 886

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

<br /><br />mysql  #1170错误(42000) BLOB/TEXT Column Used in Key Specification  Without  a  Key  Length<br />一下是本人翻译国外的网站的解决方法<br />When creating a new table or altering an existing table with primary key,unique constraints and indexes ,or when defining  a n

技术小黑屋 1万+

mysql 1170_MySQL Error 1170 (42000): BLOB/TEXT Column Used in Key Specification Without a Key Length...

今天有开发反应他的建表语句错误,我看了下,提示:MySQL Error 1170 (42000): BLOB/TEXT Column Used in Key Specification Without a Key Length原因是:MySQL不允许在BLOB/TEXT,TINYBLOB, MEDIUMBLOB, LONGBLOB, TINYTEXT, MEDIUMTEXT, LONGTEXT,V...

weixin_36309562的博客 1381

BLOB/TEXT column ‘h_long_varbinary‘ used in key specification without a key length

BLOB/TEXT column 'h_long_varbinary' used in key specification without a key length MySQL 当列的类型为 BLOB和TEXT的时候,必须InnoDB, MyISAM, and BLACKHOLE的表,而且必须指定长度 __________________________________________________________________________________________

4万+

【Mysql】1170 (42000): BLOB/TEXT column ‘mnemonic‘ used in key specification without a key length

注意:db.Text不能为unique=True一起使用【会报错】 参考:MySQL1170错误解决_mysql #1170错误(42000) BLOB/TEXT Column Used in Key Specification Without a Key Length..._邢小鹏的博客-优快云博客 解决方案是将unique限制和索引从TEXT/BLOB字段中移除,或者是设置另一个字段为主键,如果你不愿意这样做并且想在TEXT/BLOB上加限制,那么你可以尝试将这个字段更改为VARCHAR类型,

weixin_43343144的博客 1646

MySQL 添加索引报错:BLOB/TEXT column used in key specification without a key length

当我们对一个名称为platform的字段,类型为 text 添加索引时,会报错: BLOB/TEXT column 'platform' used in key specification without a key length 这样的错误,同样存在于将某个字段从 varchar 修改成 text,而该字段此前已经存在索引 原因:MySQL只能将BLOB/TEXT类型字段设置索引数据的前N个字符,因此,只需要通过sql在增加索引时指定对应字段的长度即可,如: ALTER TABLE hello_

潘广宇的博客 6608

mysql添加索引报错1170 -BLOB/TEXT column ‘xx‘ used in key specification without a key length分析及解决

因之前代码查询较慢,explain分析后,先加索引处理,结果报错 > 1170 - BLOB/TEXT column 'value' used in key specification without a key length 在 varchar 字段上建立索引时,必须指定索引长度,没必要对全字段建立索引,根据 实际文本区分度决定索引长度即可。Java 开发手册 33/44 说明:索引的长度与区分度是一对矛盾体,一般对字符串类型数据,长度为 20 的索引,区分度会高达 90%以上,可以使用

xiaobozhang1993的博客 8742

mysql blob key length_pandas对象保存到mysql出错提示“BLOB/TEXT column used in key specification without a key ...

问题将DataFrame数据保存到mysql中时,出现错误提示:BLOB/TEXT column used in key specification without a key length原因出问题的原因是DataFrame对象索引的数据类型是TEXT/BLOB或其从属的类型,当将其作为mysql中的主键的时候,如果这些数据类型缺少明确的长度值,mysql无法保证主键的唯一性,因为这个主键是一个...

weixin_42523985的博客 211

MySQL设置索引used in key specification without a key length

MySQL 原因是设置的主键必须是定长的,不然,可变长度无法保证唯一性。 将目标列长度固定即可。 References pandas对象保存到mysql出错提示“BLOB/TEXT column used in key specification without a key length”解决办法 ...

漫步量化 9130
上一篇: vue在github上少提交文件后导致编译报错
下一篇: Oracle数据导入Mysql中
qq_34412985
博客等级 码龄11年 143粉丝 983原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值