问题产生场景

mysql建表语句,创建时,提示:Index column size too large. The maximum column size is 767 bytes.

1.1 语句如下:

CREATE TABLE `ACT_HI_ACTINST` (`ID_` varchar(64) NOT NULL,`PROC_DEF_ID_` varchar(64) NOT NULL,`PROC_INST_ID_` varchar(64) NOT NULL,`EXECUTION_ID_` varchar(64) NOT NULL,`ACT_ID_` varchar(255) NOT NULL,`TASK_ID_` varchar(64),`CALL_PROC_INST_ID_` varchar(64),`ACT_NAME_` varchar(255),`ACT_TYPE_` varchar(255) NOT NULL,`ASSIGNEE_` varchar(255),`START_TIME_` datetime NOT NULL,`END_TIME_` datetime,`DURATION_` decimal(19,0),PRIMARY KEY (`ID_`),INDEX `ACT_IDX_HI_ACT_INST_END` (`END_TIME_`) comment '',INDEX `ACT_IDX_HI_ACT_INST_EXEC` (`EXECUTION_ID_`, `ACT_ID_`) comment '',INDEX `ACT_IDX_HI_ACT_INST_PROCINST` (`PROC_INST_ID_`, `ACT_ID_`) comment '',INDEX `ACT_IDX_HI_ACT_INST_START` (`START_TIME_`) comment ''
) COMMENT='';

1.2 问题产生原因

utf8字符,字段类型为varchar(255) 实际占用 255 * 3 = 765字节,大于767,超过限制,不允许创建。

utf8mb4是4字节字符集,默认支持的索引字段最大长度是191字符(767字节/4字节每字符≈191字符),

1.3 处理方法

1.3.1 修改 innodb_large_prefix 参数配置。

innodb_large_prefix 有ON和OFF两个取值:

ON :Innodb表的行记录格式是Dynamic或Compressed的前提下,单列索引长度上限扩展到3072个字节
OFF:Innodb表的单例索引长度最多为767个字节,索引长度超出后,主键索引会创建失败,辅助索引会被截断成为前缀索引

innodb表的单列索引长度最大字节数是767字节,辅助索引超出会被截断,主键索引超出不会截断直接报错导致建表失败
innodb表的联合索引中每个字段的最大字节数是767字节,并且要求联合索引的总长度不超过3072字节
主键索引不允许被截断,辅助索引可以被截断
设置参数innodb_large_prefix=ON只能把单列索引长度扩大到3072字节,联合索引总长度的上限不变,仍然是3072个字节

1.3.2 修改 innodb_file_format 参数

Antelope:Antelope是InnoDB的原始文件格式,支持COMPACT和REDUNDANT行格式,但不支持动态或压缩行格式。
Barracuda:Barracuda是一种更新的InnoDB文件格式,支持COMPACT、REDUNDANT、DYNAMIC和COMPRESSED行格式。带有BLOB或TEXT数据类型的表可大幅受益于dynamic行格式。

1.3.3 修改 innodb_file_per_table 参数

innodb可以把每个表的数据单独保存。单独保存有两方面的优势一个是方便管理,二个是提长性能

MyISAM表引擎,这种引擎的数据库会分别创建三个文件:表结构、表索引、表数据空间。我们可以将某个数据库目录直接迁移到其他数据库也可以正常工作。然而当你使用InnoDB的时候,一切都变了。

InnoDB
默认会将所有的数据库InnoDB引擎的表数据存储在一个共享空间中:ibdata1,这样就感觉不爽,增删数据库的时候,ibdata1文件不会自动收缩,单个数据库的备份也将成为问题。通常只能将数据使用mysqldump
导出,然后再导入解决这个问题。

在MySQL的配置文件[mysqld]部分,增加innodb_file_per_table参数。

可以修改InnoDB为独立表空间模式,每个数据库的每个表都会生成一个数据空间。

独立表空间:

优点:

1. 每个表都有自已独立的表空间。
2. 每个表的数据和索引都会存在自已的表空间中。
3. 可以实现单表在不同的数据库中移动。
4. 空间可以回收(除drop table操作处,表空不能自已回收)
a) Drop table操作自动回收表空间,如果对于统计分析或是日值表,删除大量数据后可以通过:alter table TableName engine=innodb;回缩不用的空间。
b) 对于使innodb-plugin的Innodb使用turncate table也会使空间收缩。

c) 对于使用独立表空间的表,不管怎么删除,表空间的碎片不会太严重的影响性能,而且还有机会处理。

缺点:

单表增加过大,如超过100个G。

结论:

共享表空间在Insert操作上少有优势。其它都没独立表空间表现好。当启用独立表空间时,请合理调整一 下:innodb_open_files。

InnoDB Hot Backup(冷备)的表空间cp不会面对很多无用的copy了。而且利用innodb hot
backup及表空间的管理命令可以实现单现移动。

1.innodb_file_per_table设置.开启方法: 在my.cnf中[mysqld]下设置 innodb_file_per_table=1

2.查看是否开启: mysql> show variables like ‘%per_table%’;

3.关闭独享表空间 innodb_file_per_table=0关闭独立的表空间 mysql> show variables like ‘%per_table%’;

1.3.4 ROW_FORMAT=DYNAMIC

脚本进行修改,创建表时增加 ROW_FORMAT=DYNAMIC

mysql 提示The maximum column size is 767 bytes.相关推荐

  1. MySQL【问题记录 01】报错 1709 - Index column size too large. The maximum column size is 767 bytes. 可能是最简单的方法

    1.问题重现 CREATE TABLE `xxl_job_registry` (`id` int(11) NOT NULL AUTO_INCREMENT,`registry_group` varcha ...

  2. 1709 - Index column size too large. The maximum column size is 767 bytes.

    1,mysql导入同事发的sql文件报如下错误:1709 - Index column size too large. The maximum column size is 767 bytes. 2, ...

  3. The maximum column size is 767 bytes

    ERROR 1709 (HY000): Index column size too large. The maximum column size is 767 bytes. 解决方案: 1.修改mys ...

  4. ERROR 1709 (HY000): Index column size too large. The maximum column size is 767 bytes.

    MySQL版本5.6.35 在一个长度为512字符的字段上创建unique key报错 CREATE DATABASE dpcs_metadata DEFAULT CHARACTER SET utf8 ...

  5. 解决因nginx配置导致文件上传失败的问题 The filed file exceeds its maximum permitted size of 1048576 bytes

    解决因nginx配置问题导致文件上传失败的问题 1.问题背景 2.问题截图 3.问题分析 4.问题解决(修改nginx的配置) 5.解决之后的"后遗症"(截图) 6.分析并解决&q ...

  6. springBoot:The field file exceeds its maximum permitted size of 1048576 bytes.

    一.简介 Spring Boot做文件上传时出现了The field file exceeds its maximum permitted size of 1048576 bytes.错误, 显示文件 ...

  7. Spring Boot 批量上传: The field files exceeds its maximum permitted size of 1048576 bytes.

    Spring Boot 批量上传异常: org.apache.tomcat.util.http.fileupload.FileUploadBase$FileSizeLimitExceededExcep ...

  8. 解决问题:The field file exceeds its maximum permitted size of 1048576 bytes

    错因描述: springboot项目使用文件上传失败,上传是个Excel文件,大小为1.35M The field file exceeds its maximum permitted size of ...

  9. FileSizeLimitExceededException: The field file exceeds its maximum permitted size of 1048576 bytes.

    问题描述 使用Springboot上传流时,出现了下面的异常 org.apache.tomcat.util.http.fileupload.impl.FileSizeLimitExceededExce ...

最新文章

  1. OpenCV学习笔记(三):图像对比度、亮度调整源码
  2. 当学术论文开始标题党「x is All You Need」
  3. 曝李国庆抢走当当公章发《告当当全体员工书》,当当网:已报警,公章作废...
  4. stm32产生100k时钟信号_stm32f105/107系统时钟变慢
  5. 台达plc读取变频器电流案例_PLC模拟量信号数据转换过程
  6. maven笔记(2)
  7. Java中Spring中的方法加上try catch后事务管理器失效无法回滚的情况
  8. 2021-2025年中国串级太阳能逆变器行业市场供需与战略研究报告
  9. 密码学家王小云:十年破解MD5和SHA-1两大国际密码
  10. 一款全国产USB3.0网卡方案介绍
  11. 快速搞懂Oracle 19c安全新特性 (二) Privilege Analysis(权限分析)
  12. 北邮计算机 六级,【北邮晚安】大学宿舍关系分六级,你在哪一层?
  13. 转基因,请你走出这片净土。!!!食用转基因的人,你们伤不起~有木有,有木有啊~!!!!!!!!!!!!!!!
  14. PAT 1082 射击比赛
  15. intuitionistic fuzzy set 运算规则python实现
  16. 信源编码算法(费诺编码哈夫曼编码)
  17. 报表在linux下部署后中文变成小方块
  18. springBoot+layui 压缩包 直接下载--或--直接压缩并下载方法
  19. 无线路由dns服务器地址,无线路由器更换DHCP地址段、DNS地址设置
  20. common.io中Tailer类读取文件内容乱码问题解决

热门文章

  1. Python+Flask框架搭建可视化网站
  2. 概率与数理统计-笔记说明
  3. 《凡人修真2》 架设
  4. SkeyeARS全景AR增强监视系统助力林业部门打造森林防火视频监控网
  5. 《预测控制》学习记录二-DMC的内模控制结构(IMC)分析
  6. 【matlab系列汇总】matlab学习实战快速进阶之路(持续更新)
  7. 月薪40k+测试·开发同步认可的FastAPI:Python 世界里最受欢迎的异步框架
  8. 百度对“十进制网络”的官方态度
  9. 医院临床信息管理系统
  10. regsvr32 注册.dll的用法