1、问题描述
在导入同事提供的一个sql文件时候,出现了一个1071错误,总结学习一下:
2、分析问题
错误的字面意思是说mysql字段设置的值太长了,不能大于767个字节,在网上找了一些资料后才知道原理:
当我们给表建立索引时,数据库会计算key的长度是累加所有Index用到的字段的char长度后再按下面比例乘起来不能超过限定的key长度(myisam和innodb存储引擎下长度限制分别为1000 bytes和767 bytes)
latin1 = 1 byte = 1 character uft8 = 3 byte = 1 character gbk = 2 byte = 1 character
3.解决问题
1)单列索引长度限制
2) 组合索引长度限制
对于innodb存储引擎,多列索引的长度限制如下:
每个列的长度不能大于767 bytes;所有组成索引列的长度和不能大于3072 bytes
对于myisam存储引擎,多列索引长度限制如下:
每个列的长度不能大于1000 bytes,所有组成索引列的长度和不能大于1000 bytes