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 ...
随机推荐
- java中,字符串类型的时间数据怎样转换成date类型。
将字符串类型的时间转换成date类型可以使用SimpleDateFormat来转换,具体方法如下:1.定义一个字符串类型的时间:2.创建一个SimpleDateFormat对象并设置格式:3.最后使用 ...
- React组件性能调优
React是一个专注于UI层的框架,它使用虚拟DOM技术,以保证它UI的高速渲染:使用单向数据流,因此它数据绑定更加简单:那么它内部是如何保持简单高效的UI渲染呢?这种渲染机制有可能存在什么性能问题呢 ...
- NYOJ-15:括号匹配(二)
内存限制:64MB 时间限制:1000ms 特判: No 通过数:54 提交数:158 难度:6 题目描述: 给你一个字符串,里面只包含"(",")",&quo ...
- 19.python的序列化
自定制序列化 import json from datetime import datetime class JsonCustomEncoder(json.JSONEncoder): #自定制序列化类 ...
- 查看那些进程使用了swap
https://blog.csdn.net/xiangliangyu/article/details/8213127$ sudo pacman -S iotop https://blog.longwi ...
- Python 配置 selenium 模拟浏览器环境,带下载链接
使用浏览器渲染引擎.直接用浏览器在显示网页时解析HTML,应用CSS样式并执行JavaScript的语句. 这方法在爬虫过程中会打开一个浏览器,加载该网页,自动操作浏览器浏览各个网页,顺便把数据抓下来 ...
- MyEclipse2017创建Spring项目
1.创建一个Web Project 2.右击项目-->Properties 3.搜索Spring -->Peoject Facets-->在右边找到Spring,打勾并保存 4.测试 ...
- 洛谷10月月赛II题解
[咻咻咻] (https://www.luogu.org/contestnew/show/11616) 令人窒息的洛谷月赛,即将参加NOIp的我竟然只会一道题(也可以说一道也不会),最终145的我只能 ...
- CodeForce Educational round Div2 C - Vasya and Robot
http://codeforces.com/contest/1073/problem/C 题意:给你长度为n的字符串,每个字符为L, R, U, D.给你终点位置(x, y).你每次出发的起点为( ...
- adb和机顶盒一些常识
1.adb install强制安装在SD卡 因为盒子/data/空间不够了.而默认apk就安装在了/data/目录下.因此需要更改默认安装位置 命令参照 进入adb shell $adb shell ...