mysql 运行sql错误 1071

今天在本地创建了一个mysql数据库,然后运行了sql,报错了,在服务器的mysql上执行是没问题的,错误信息是:

1071 Specified key was too long; max key length is 767 bytes

然后就想到了,服务器上是5.7的,

mysql版本

而我本地的mysql版本是5.6的,就是版本导致的问题,那么为什么一般都不会出现问题,今天反而出现了呢?

本地mysql版本

查找发现就是这个primary key部分报错的。错误信息的意思是,设置的键长超过了767 bytes。在mysql 5.5.3之前,mysql的InnoDB引擎,要求设置的主键长度不得超过767bytes。mysql的MyIsam引擎的主键长度不得超过1000 bytes。

在mysql中,gbk字符集会占用2个字节。utf8字符会占用3个字节,而且从mysql5.5.3之后的版本,mysql 开始支持utf8m4字符,代表着一个字符占用4个字节。也就是说:

(255+10+10)*3 = 825  //在用utf8作为字符集的时候,超过了规定的767 bytes

(255+10+10)*2 = 550  //当该用gbk作为字符集的时候

(255+10+10)*4 = 1100  //当用utf8m4作为字符集的时候,也超标了

找到问题了自然就有解决方法了:

1、修改字符长度

//根据上面的分析可以进行计算,我的主键长度不能超过192

768/4 = 192            // 但这样很明显是不符合的需求的,不能随便改动数据库的字段!

2、设置数据库属性 由utf8mb4转为utf8 。

 这两个区别是 utf8mb4多了emoji编码支持,而utf8不支持,如果你想要支持emoji,那么就不能这样操作。

3、升级mysql

服务器数据库采用的是mysql5.7版本。升级数据库问题就会解决。

你可能感兴趣的:(mysql 运行sql错误 1071)