博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
1071 - Specified key was too long; max key length is 767 bytes
阅读量:4182 次
发布时间:2019-05-26

本文共 705 字,大约阅读时间需要 2 分钟。

Mysql 建表错误1071 - Specified key was too long; max key length is 767 bytes

今天遇到了一个Mysql建表问题,报错1071 - Specified key was too long; max key length is 767 bytes。

仔细查看建表sql语句,没有发现什么特别的地方,最后找到原因,这里记录下。

起因:

我在表中设置某个字段为varchar(255) unique,执行建表语句就报错。

经过各方查找,我发现了这个问题和数据库字符集有关。具体的情况stackoverflow上大家的讨论:一个utf8字符占3个byte,一个utf8mb4的字符占4个byte,而mysql的innodb有限制索引长度不得超过767,简而言之就是一个公式。

utf8: 2553 = 765 < 767 < 2563 = 768

utf8mb4: 1914 = 764 < 767 < 1924=768
所以就得出了结论

INNODB utf8 VARCHAR(255)

INNODB utf8mb4 VARCHAR(191)
解决办法有以下几种:

1.建表时候直接指定使用utf8字符集而不是utf8mb4(这个方案就是修改字符集,当然你也可以修改mysql的全局配置实现)

2.使用innodb建表,并设置mysql配置项innodb_large_prefix=on,这种办法就是设置启用innodb_large_prefix选项,将约束项扩展至3072byte

3.修改字段长度即utf8下面255 utf8mb4下191

参考:

转载地址:http://nwgai.baihongyu.com/

你可能感兴趣的文章
Java复制文件的4种方式
查看>>
mysql的JDBC连接工具类
查看>>
利用多线程(用到原子类AtomicInteger)往数据库批量插入大量数据
查看>>
多个线程操作数组
查看>>
定长线程池的应用
查看>>
ArrayBlockingQueue的简单使用
查看>>
Git 常用命令总结(一)
查看>>
Git 常用命令总结(二)
查看>>
JAVA 并发——synchronized的分析
查看>>
Echarts——使用 dataset 管理数据
查看>>
DES 加解密工具类
查看>>
SpringBoot多模块项目实践(Multi-Module)
查看>>
第一篇: 服务的注册与发现Eureka(Greenwich版)
查看>>
第二篇: 服务消费者(rest+ribbon)(Greenwich版本)
查看>>
第三篇: 服务消费者(Feign)(Greenwich版本)
查看>>
获取客户的真实IP地址
查看>>
第四篇: 熔断器(Ribbon+Feign)(Greenwich版本)
查看>>
Linux的常用命令(一)
查看>>
Linux的常用命令(二)
查看>>
第六篇: 分布式配置中心(Greenwich版本)
查看>>