前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >mysql Specified key was too long; max key length is 767 bytes

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

作者头像
oktokeep
发布于 2024-11-23 03:00:44
发布于 2024-11-23 03:00:44
19100
代码可运行
举报
文章被收录于专栏:第三方工具第三方工具
运行总次数:0
代码可运行

mysql Specified key was too long; max key length is 767 bytes <w>查询:ALTER TABLE `order_test_code` MODIFY COLUMN `out_order_no` VARCHAR(200) DEFAULT NULL COMMENT '外部订单号'

共 0 行受到影响, 1 个警告

执行耗时 : 0.098 sec 传送时间 : 1.372 sec 总耗时 : 1.470 sec

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

1.表的字段上面有索引,在扩大索引列的字段的时候会报该错误。 2.表的字段如果没有索引,扩大字段的长度varchar(300) 不会报错。

https://help.aliyun.com/document_detail/211557.html 在DMS中为MySQL建立索引时出现“Specified key was too long; max key length is 767 bytes”报错

问题原因 以MySQL的varchar、char等字符串类型字段作为索引时,单个索引字段存储长度超过了767字节。

解决方法 请根据实际情况选择对应的解决方法:

启用innodb_large_prefix参数 如果您使用的是云数据库RDS,可以在RDS控制台中将innodb_large_prefix参数修改为ON 减小字段存储长度 请根据实际情况将字段存储长度设置为正常的长度:

以InnoDB为引擎的MySQL建立索引时,单个最大索引字段存储长度为767。不同字符集的最大单个索引字段存储长度不同。因此,需要根据不同字符集修改对应字符串类型字段的前缀索引长度。以下是不同字符集定义前缀索引长度的方法。 1.UTF-8MB4 按照表为UTF-8MB4字符集的标准,单个字符需要4个字节进行存储,则最大定义索引前缀需设置为191,具体计算方法如下。 767/4=191

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#查询表的脚本:
...
out_order_no varchar(200) default null comment '外部订单号',
...
KEY 'out_order_no_idx' ('out_order_no'(191))
}ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4

2.UTF-8 按照表为UTF-8字符集的标准,单个字符需要3个字节进行存储,则最大定义索引前缀需设置为255,具体计算方法如下。 767/3=255

3.GBK 按照表为GBK字符集的标准,单个字符需要2个字节进行存储,则最大定义索引前缀需设置为383,具体计算方法如下。 767/2=383

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-11-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档