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 ...
随机推荐
- 西门子SCL读写DB数据
数据块间接寻址方式,仅供参考. STATUS_1:= DB11.DW[COUNTER]; //字节间接寻址STATUS_2:= DB12.DX[WNO, BITNO]; //位间接寻址,用户改变WNO ...
- python 7
一.数据类型的补充 1.元组 tu1 = ('大海') tu2 = ('大海',) print(tu1, type(tu1), tu2, type(tu2)) 大海 <class 'str'&g ...
- Dart 中dynamic 的使用
void main(){ var a; a=10; b ="Dart"; dynamic b =20; b ="JavaScript" var list =ne ...
- TIME_WAIT
前言 请说说你对TCP连接中time_wait状态的理解 解答: 先上TCP的状态变迁图 1. time_wait状态如何产生? 由上面的变迁图,首先调用close()发起主动关闭的一方,在发送最后一 ...
- C#取出重复的方式以及用字典存储以键存储集合的方法
最近在做项目的时候,发现有些需求需要特别的方式来实现.下面看代码 private List<string> firstType = new List<string>(); pr ...
- C#服务端Web Api
本教程已经录制视频,欢迎大家观看我在CSDN学院录制的课程:http://edu.csdn.net/lecturer/944
- JTA事务管理
何为分布式事务 一个事务包含多个操作,多个操作操作了多个数据源,这样的事务称为分布式事务 和普通事务的区别 单一数据源,事务管理可以借助数据源本地事务完成,实现简单 分布式事务之困难:不可简单的借助数 ...
- 491. Increasing Subsequences
这种increasing xxx 题真是老客户了.. 本题麻烦点在于不能重复, 但是和之前的那些 x sum的题目区别在于不能排序的 所以.... 我还是没搞定. 看了一个Java的思路是直接用set ...
- 第五章HTML
HTML介绍 标签:有一个头,一尾 <!DOCTYPE html><html lang="en"><head> <!-- 文档的标题.编码 ...
- AWS Tagging Strategies
How should I tag my AWS resources? Amazon Web Services (AWS) allows customers to assign metadata to ...