Specified key was too long; max key length is 767 bytes解决方案
1. 使用spark sql处理数据逻辑,逻辑处理后使用 df.write.mode(saveMode).jdbc(url, tableName, connectionProperties)将数据写入mysql,创建的数据结构为:
2. 为表创建索引
执行到如下语句会抛出 Specified key was too long; max key length is 767 bytes的错误
statement.executeUpdate("ALTER TABLE " + tableName + " ADD INDEX index_userIdAndSchoolId(userId,schoolId)")
问题原因:
创建索引时,为索引字段指定长度。
statement.executeUpdate("ALTER TABLE " + tableName + " ADD INDEX index_userIdAndSchoolId(userId(180),schoolId(20))")
Mysql数据类型如下:
数字型
|
类型
|
大小
|
范围(有符号)
|
范围(无符号)
|
用途
|
|
TINYINT
|
1 字节
|
(-128,127)
|
(0,255)
|
小整数值
|
|
SMALLINT
|
2 字节
|
(-32 768,32 767)
|
(0,65 535)
|
大整数值
|
|
MEDIUMINT
|
3 字节
|
(-8 388 608,8 388 607)
|
(0,16 777 215)
|
大整数值
|
|
INT或INTEGER
|
4 字节
|
(-2 147 483 648,2 147 483 647)
|
(0,4 294 967 295)
|
大整数值
|
|
BIGINT
|
8 字节
|
(-9 233 372 036 854 775 808,9 223 372 036 854 775 807)
|
(0,18 446 744 073 709 551 615)
|
极大整数值
|
|
FLOAT
|
4 字节
|
(-3.402 823 466 E+38,1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38)
|
0,(1.175 494 351 E-38,3.402 823 466 E+38)
|
单精度
浮点数值 |
|
DOUBLE
|
8 字节
|
(1.797 693 134 862 315 7 E+308,2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)
|
0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)
|
双精度
浮点数值 |
|
DECIMAL
|
对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2
|
依赖于M和D的值
|
依赖于M和D的值
|
小数值
|
字符型
|
CHAR
|
0-255字节
|
定长字符串
|
|
VARCHAR
|
0-255字节
|
变长字符串
|
|
TINYBLOB
|
0-255字节
|
不超过 255 个字符的二进制字符串
|
|
TINYTEXT
|
0-255字节
|
短文本字符串
|
|
BLOB
|
0-65 535字节
|
二进制形式的长文本数据
|
|
TEXT
|
0-65 535字节
|
长文本数据
|
|
MEDIUMBLOB
|
0-16 777 215字节
|
二进制形式的中等长度文本数据
|
|
MEDIUMTEXT
|
0-16 777 215字节
|
中等长度文本数据
|
|
LOGNGBLOB
|
0-4 294 967 295字节
|
二进制形式的极大文本数据
|
|
LONGTEXT
|
0-4 294 967 295字节
|
极大文本数据
|
枚举类型
ENUM (最多65535个成员) 64KB
SET (最多64个成员) 64KB
日期类型
|
类型
|
大小
(字节) |
范围
|
格式
|
用途
|
|
DATE
|
3
|
1000-01-01/9999-12-31
|
YYYY-MM-DD
|
日期值
|
|
TIME
|
3
|
'-838:59:59'/'838:59:59'
|
HH:MM:SS
|
时间值或持续时间
|
|
YEAR
|
1
|
1901/2155
|
YYYY
|
年份值
|
|
DATETIME
|
8
|
1000-01-01 00:00:00/9999-12-31 23:59:59
|
YYYY-MM-DD HH:MM:SS
|
混合日期和时间值
|
|
TIMESTAMP
|
8
|
1970-01-01 00:00:00/2037 年某时
|
YYYYMMDD HHMMSS
|
混合日期和时间值,时间戳
|
Specified key was too long; max key length is 767 bytes解决方案的更多相关文章
- EF MySql:Specified key was too long; max key length is 767 bytes解决方案
[DbConfigurationType(typeof(MySqlEFConfiguration))]//添加特性 public partial class Model1 : DbContext { ...
- 数据库操作提示:Specified key was too long; max key length is 767 bytes
操作重现: 法1:新建连接——>新建数据库——>右键数据库导入脚本——>提示:Specified key was too long; max key length is 767 by ...
- Mysql Specified key was too long; max key length is 767 bytes
今天导入一个数据库时,看到以下报错信息: Specified key was too bytes 直译就是索引键太长,最大为767字节. 查看sql库表文件,发现有一列定义如下: 列 名:cont ...
- Specified key was too long; max key length is 767 bytes mysql
Specified key was too long; max key length is 767 bytes 说明: 执行当前 Web 请求期间,出现未经处理的异常.请检查堆栈跟踪信息,以了解有关该 ...
- Using innodb_large_prefix to avoid ERROR #1071,Specified key was too long; max key length is 1000 bytes
Using innodb_large_prefix to avoid ERROR 1071 单列索引限制上面有提到单列索引限制767,起因是256×3-1.这个3是字符最大占用空间(ut ...
- EF MySQL 提示 Specified key was too long; max key length is 767 bytes错误
在用EF的CodeFirst操作MySql时,提示 Specified key was too long; max key length is 767 bytes错误,但数据库和表也建成功了.有高人知 ...
- Specified key was too long; max key length is 767 b
alter table - engine=innodb,row_format=dynamic; Specified key was too long; max key length is 767 b
- MySQL错误“Specified key was too long; max key length is 1000 bytes”的解决办法
MySQL错误"Specified key was too long; max key length is 1000 bytes"的解决办法 经过查询才知道,是Mysql的字段设置 ...
- ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes
今天在MySQL 5.6版本的数据库中修改InnoDB表字段长度时遇到了"ERROR 1071 (42000): Specified key was too long; max key le ...
随机推荐
- LDAP-HA安装与配置(Keepalived方式实现)
LDAP部署 安装LDAP(主节点) 安装LDAP Server yum install db4 db4-utils db4-devel cyrus-sasl* krb5-server-ldap -y ...
- javaWeb-Servlet工作原理
1.客户发出请求—>Web 服务器转发到Web容器Tomcat: 2.Tomcat主线程对转发来用户的请求做出响应创建两个对象:HttpServletRequest和HttpServletRes ...
- 前端小白第一次使用redux存取数据练习
在学习了redux基本教程后,课程参考如下网址:https://www.redux.org.cn/docs/introduction/CoreConcepts.html,开始着手练习 1.首先编写一个 ...
- 转载 JAVA gc垃圾回收机制
thanks:https://m.oschina.net/u/123553 一.GC概要 JVM堆相关知识 为什么先说JVM堆? JVM的堆是Java对象的活动空间,程序中的类的对象从中分 ...
- vue中父组件给子组件额外添加参数
1 子组件: this.$emit('callbackone',item.parentId) 2 父组件: @callbackone="callbackone($event,index)&q ...
- c# 枚举安卓系统中所有目录及文件名
using Android.App; using Android.Widget; using Android.OS; using System.Runtime.InteropServices; nam ...
- 使用nginx mirror 制作nexus 的简单ha
主要是运行两台nexus 机器,通过nexus 的host 以及proxy 以及public 模型,结合nginx 的mirror 将对于host 的get 请求 mirror 到另一台机器pro ...
- Vue面试中经常会被问到的面试题
一.对于MVVM的理解 MVVM是 Model-View-ViewModel 的缩写. Model代表数据模型,也可以在Model中定义数据修改和操作的业务逻辑. View代表UI组件,它负责将数据模 ...
- RESTful API浅谈
一.REST的由来 全称:REST,全称是Resource Representational State Transfer,即:资源在网络中以某种形式进行状态转移.————所谓状态的转移,可参考< ...
- rust debug之基于pdb
方法一: 用visual studio 步骤: 安装msvc工具链 rustup toolchain install stable-x86_64-pc-windows-msvc 切换到该工具链 rus ...