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 ... 
随机推荐
- c#枚举描述
			1.枚举遍历 public enum e_Sex{ male=, female= } foreach (var value in Enum.GetValues(typeof(e_Sex)){ /* 获 ... 
- 三、后门的编写和 ShellCode 的提取
			第三章.后门的编写和 ShellCode 的提取 (一)IP 和 Socket 编程初步 NOTES: 1.Windows 下网络通信编程的几种方式 第一种是基于 NetBIOS 的网络编程,这种方法 ... 
- maven web工程 解决了pom.xml报错之后,maven web工程还是有个红色的叉叉 解决
			这里之前有个红色叉叉 改完了pom.xml文件之后需要:右键工程-MavenMyEclipse-Update Project 刷新Maven web 工程,即可解决此问题 
- 使用delimiter //,解决mysql end报错问题
			这是我的初始报错的代码: )) begin select sc.* from sc where sno= student_no end; 会报这个错误,“Error Code: 1064. You h ... 
- Linux之prink原理
			我的分析是基于Linux4.15.1 1.看看kernel是如何调用到console初始化函数的: 分两条线: a.start_kernel --> console_init --> ... 
- 巡风配置安装 –centOS6.5
			巡风是一款适用于企业内网的漏洞快速应急.巡航扫描系统,通过搜索功能可清晰的了解内部网络资产分布情况,并且可指定漏洞插件对搜索结果进行快速漏洞检测并输出结果报表. 其主体分为两部分:网络资产识别引擎,漏 ... 
- DEA快速生成get&set方法
			将下图UserInfo类中的几个对象全部生成 get/set方法: 方法步骤: 1. 将光放置空白区域,按 [alt + (fn+insert)] ,或 [ alt + insert] 键! 2. ... 
- Java 关键字详解(持续更新中)
			abstract: 表明类或者成员方法具有抽象熟悉. 修饰类,抽象类: 抽象类不能被实例化: 抽象类中可以有属性.方法.构造,都是用来给子类继承的: ... 
- zabbix监控到异常后自动执行对应命令
			zabbix可不仅仅只有监控功能,还支持远程执行命令,实现简单自动化运维 以下以监控mysql的3306端口为例,如该端口异常关闭,自动执行命令重启mysql 创建一个监听3306的监控项,键值按照这 ... 
- springboot2.0 springcloud 断路器仪表盘支持
			springboot 1.5 的时候 springcloud 添加 断路器仪表盘 按照网上的方法是没有问题的 但是 springboot2.0的时候一直无法连接 所以需要添加 @Beanpubl ... 
