问题

1.

将DataFrame数据保存到mysql后,添加索引出现错误提示:
  BLOB/TEXT column used in key specification without a key length

2.

mysql> CREATE INDEX credit_creditchannel_parse_h_index ON credit_creditchannel_parse_h(custid);
1170 - BLOB/TEXT column 'custid' used in key specification without a key length

原因

出问题的原因是DataFrame对象索引的数据类型是TEXT/BLOB或其从属的类型,当将其作为mysql中的主键的时候,

如果这些数据类型缺少明确的长度值,mysql无法保证主键的唯一性,因为这个主键是一个变量,其长度是动态的。

所以当使用 TEXT/BLOB类型的数据作为索引的时候,数据的长度必须提供给mysql,使其能够明确键的长度。但是mysql不支持对TEXT/BLOB长度的限制。

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

解决方法

1.

mysql> alter table credit_creditchannel_parse_h modify column custid varchar(9);
Query OK, 481562 rows affected (11.26 sec)
Records: 481562 Duplicates: 0 Warnings: 0

r

mysql> CREATE INDEX credit_creditchannel_parse_h ON credit_creditchannel_parse_h (custid); 
Query OK, 0 rows affected (2.44 sec) Records: 0 Duplicates: 0 Warnings: 0

对于pandas应该如下:

1.指定dtype的code字段的数据类型变为varchar(max)

解决这个问题的方式之一是舍弃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())})

2.提前建表,truncate table+data.to_sql(if_exists='append')

												

最新文章

  1. C#软件设计——小话设计模式原则之:接口隔离原则ISP
  2. std::vector<bool>中的坑
  3. BZOJ1146——[CTSC2008]网络管理Network
  4. Reservoir Sampling 蓄水池抽样算法,经典抽样
  5. 文件传输基础——Java IO流
  6. java万物皆对象
  7. 《Java程序设计》第九周学习总结
  8. 手把手让你爱上Android sdk自带“9妹”(9patch 工具)
  9. Android实现Filterable通过输入文本框实现联系人自动筛选
  10. 一款基于css3的3D图片翻页切换特效
  11. [iOS基础控件 - 6.10.4] 项目启动原理 项目中的文件
  12. [LeetCode]题解(python):025-Reverse Nodes in k-Group
  13. macbook 263企业邮箱设置
  14. 关于echarts、layer.js和jqGrid的知识点
  15. Java线程锁,synchronized、wait、notify详解
  16. vue双向数据绑定
  17. JSON数据的优化
  18. Mysql正常启动之后默认使用的文件
  19. 【Coursera】Technology :Fifth Week(2)
  20. Gym 101201F Illumination (Two-Sat)

热门文章

  1. coverage代码覆盖率的使用~~
  2. [转帖]postgres csv日志和查看用户权限
  3. 控制台程序转化为windows服务
  4. es查询优化思路
  5. JVM -- 对象的概述和引用
  6. Erlang:[笔记一,构建工具rebar之编译]
  7. 封装ADO库之MFC应用
  8. Python标准库之sched模块介绍
  9. Hadoop的理解笔记
  10. json字符串,json对象,java对象互相转换