Mysql使用中遇到的错误

Mysql使用中遇到的错误,第1张

Mysql使用中遇到的错误

在使用mysql的时候经常遇到各种问题,之前都是每次遇到查询一下网上的解决方案解决掉,但是下次再遇到还是记不住,需要重新百度解决,今天又遇到了一个问题,顺便记录下来方便以后查阅,这篇文章会不断进行更新,记录我使用mysql过程中遇到的问题,各位小伙伴如果有遇到奇怪的问题,欢迎留言,我一起整理一下,方便大家查阅,各位看到此博客的小伙伴,如有不对的地方请及时通过私信我或者评论此博客的方式指出,以免误人子弟。多谢!

目录

问题一

ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes 或者 Index column size too large. The maximum column size is 767 bytes

场景

原因

解决


问题一 ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes 或者 Index column size too large. The maximum column size is 767 bytes 场景

我的建表语句是这样的:

CREATE TABLE `xxl_job_registry` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `registry_group` VARCHAr(50) NOT NULL,
  `registry_key` VARCHAr(255) NOT NULL,
  `registry_value` VARCHAr(255) NOT NULL,
  `update_time` DATETIME DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `i_g_k_v` (`registry_key`)
)  ENGINE=INNODB DEFAULT CHARSET=utf8mb4;

问题一的错误意思就是索引字段长度太长,超过了767bytes。看了下我建表索引字段为VARCHAr(255),看起来没啥毛病,之前都是这么用的,为什么会报错呢?看下面: 

原因

mysql的索引只支持不超过767个字节或者768/2=384个双字节 或者767/3=255个三字节的字段 而GBK是双字节的,UTF8是三字节的。utf8mb4专门用来兼容四字节的unicode(每个字符最大的字节数为4)所以很明显 4*255 > 767,所以会报超长的错误。

解决

你可以降低一下字段的字符长度别超了767即可,比如使用VARCHAr(100),如果非要使用VARCHAr(255),那就看下面的解决方式:修改InnoDB的innodb_large_prefix,innodb_file_format参数。

-- 查看原值
SHOW VARIABLES LIKE 'innodb_large_prefix';
SHOW VARIABLES LIKE 'innodb_file_format';
-- 修改参数值
SET GLOBAL innodb_large_prefix=1;
SET GLOBAL innodb_file_format=BARRACUDA;

然后在建表的时候指定表的row_format为dynamic或者compressed。改为如下:

CREATE TABLE `xxl_job_registry` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `registry_group` VARCHAr(50) NOT NULL,
  `registry_key` VARCHAr(255) NOT NULL,
  `registry_value` VARCHAr(255) NOT NULL,
  `update_time` DATETIME DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `i_g_k_v` (`registry_key`)
)ROW_FORMAT=DYNAMIC ENGINE=INNODB DEFAULT CHARSET=utf8mb4;

 如果不指定row_format会报第二个错误:Index column size too large. The maximum column size is 767 bytes。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5637904.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存