问题

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

原因

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

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

解决方法

解决这个问题的方式之一是舍弃TEXT/BLOB列作为索引,或者设置另外的列作为主键。如果不得不设置成主键,而想限制TEXT/BLOB的长度,可以尝试使用VARCHAR并设置其长度。VARCHAR默认长度是255个字符,并且其长度必须在其声明之后在其括号中设置,例如,VARCHAR(200)将其设置成200个字符长度。

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

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

参考

http://stackoverflow.com/questions/38522513/can-pandas-with-mysql-support-text-indexes

http://stackoverflow.com/questions/1827063/mysql-error-key-specification-without-a-key-length

pandas对象保存到mysql出错提示“BLOB/TEXT column used in key specification without a key length”解决办法的更多相关文章

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

    错误原因: 查阅资料后才知道,原来Mysql数据库对于BLOB/TEXT这样类型的数据结构只能索引前N个字符.所以这样的数据类型不能作为主键,也不能是UNIQUE的.所以要换成VARCHAR,但是VA ...

  2. Springboot(八):emoji表情保存到mysql出错的解决办法

    emoji表情保存到mysql出错的解决办法 今天,在前端的说明信息中输入emoji表情的时候,插入数据库会报错 百度了一下,是因为mysql数据库的字符编码集不正确,utf8无法存入表情字符,只能将 ...

  3. [MySQL-1] mysql error 1101 blob/text column can't have a default value

    在MySQL Query Browser上创建一个含有TEXT类型的字段,创建不成功,报错:mysql error 1101 blob/text column can't have a default ...

  4. 安装mysql时提示The host 'xxx' could not be looked up with resolveip的解决办法

    1.首先用cat查看/etc/hosts文件,会显示以下内容: 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.loca ...

  5. 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] Ge ...

  6. php将图片以二进制保存到mysql数据库并显示

    一.存储图片的数据表结构: -- -- 表的结构 `image` -- CREATE TABLE IF NOT EXISTS `image` ( `id` int(3) NOT NULL AUTO_I ...

  7. Python scrapy爬虫数据保存到MySQL数据库

    除将爬取到的信息写入文件中之外,程序也可通过修改 Pipeline 文件将数据保存到数据库中.为了使用数据库来保存爬取到的信息,在 MySQL 的 python 数据库中执行如下 SQL 语句来创建 ...

  8. node 爬虫 --- 将爬取到的数据,保存到 mysql 数据库中

    步骤一:安装必要模块 (1)cheerio模块 ,一个类似jQuery的选择器模块,分析HTML利器. (2)request模块,让http请求变的更加简单 (3)mysql模块,node连接mysq ...

  9. Asp.net Session 保存到MySql中

    一 网站项目引入"mysql.web.dll" 二 web.config配置中添加mysql数据库连接字符串 <connectionStrings> <remov ...

随机推荐

  1. CI 框架增加公用函数-如何使用Helper辅助函数

    在CI框架增加一个公用的函数,或者说是要在页面上调用一个函数,可以写一个帮助类如:menu_helper.php.类名必有_helper后缀名,这标识为帮助类.文件要放在application/hel ...

  2. group by应用

    注意: having是对分组后的数据进行第二次筛选或者过滤,也就是说没有group by就没having where之后不能有聚合函数 查询每个年级的总学时数,并按照升序排列select GradeI ...

  3. Visual Studio vs2010 去掉中文注释红色下划线;去掉代码红色下划线;

    vs去掉下挂线也分两种: 1.去掉中文注释红色下划线,需要去掉VisualAssist下划线鸡肋功能: 1.选择Visual AssistX Options: 2.把如图所示的勾去掉,解决. 以后再次 ...

  4. 读书笔记之 - javascript 设计模式 - 组合模式

    组合模式是一种专为创建Web上的动态用户界面而量身定制的模式,使用这种模式,可以用一条命令在对各对象上激发复杂的或递归的行为. 在组合对象的层次体系中有俩种类型对象:叶对象和组合对象.这是一个递归定义 ...

  5. 【转】 C语言自增自减运算符深入剖析

    转自:http://bbs.csdn.net/topics/330189207 C语言的自增++,自减--运算符对于初学者来说一直都是个难题,甚至很多老手也会产生困惑,最近我在网上看到一个问题:#in ...

  6. prototype/constructor/__proto__之constructor。

    1.constructor的字面意思就是构造.它是对象的一个属性,它对应的值是该对象的“构造者” //一.构造函数实例化的对象的constructor function Cmf(n,m){ this. ...

  7. php之图片处理类缩略图加水印

    用到两个image系统函数 imagecopymerge — 拷贝并合并图像的一部分 imagecopyresampled — 重采样拷贝部分图像并调整大小 /* 如何知道图片的大小和类型 无法确认调 ...

  8. PHP面向对象(OOP):__toString()方法

    我们前面说过在类里面声明“__”开始的方法名的方法(PHP给我们提供的),都是在某一时刻不同情况下自动调用执行的方 法,“__toString()”方法也是一样自动被调用的,是在直接输出对象引用时自动 ...

  9. github 中redisPhpAdmin redis 可视化界面

    GITHUB地址:https://github.com/ErikDubbelboer/phpRedisAdmin 在php目录下执行 git clone https://github.com/Erik ...

  10. 如何正确的使用uwsgi

    简单的安装过程可以在这里找到,这里主要说一下如何配置uwsgi的服务,将uwsgi服务加入系统进程,你可以使用如下两种方式安装 apt-get apt-get install uwsgi 该命令会自动 ...