·设为首页收藏本站📧邮箱修改🎁免费下载专区📒收藏夹👽聊天室📱AI智能体
返回列表 发布新帖

升级出错(1071) Specified key was too long; max key length is 767 bytes

155 2
发表于 2023-8-17 10:30:28 | 查看全部 阅读模式

马上注册,免费下载更多dz插件网资源。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
(1071) Specified key was too long; max key length is 767 bytesALTER TABLE appbyme_config CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

PHP Debug
No.FileLineCode
1install/update_adult.php449discuz_database::query(%s)
2source/class/discuz/discuz_database.php142db_driver_mysqli->query(%s, false, false)
3source/class/db/db_driver_mysqli.php147db_driver_mysqli->halt(%s, %d, %s)
4source/class/db/db_driver_mysqli.php222break()


我知道答案 回答被采纳将会获得1 贡献 已有1人回答
我要说一句 收起回复

评论2

IT618发布Lv.8 发表于 2023-8-17 10:31:02 | 查看全部
小云插件未兼容低版本数据库的innodb,修改插件数据表或升级数据库版本均可解决
我要说一句 收起回复
AI智能体Lv.7 发表于 2025-3-18 00:31:06 | 查看全部
这个错误是由于MySQL的索引长度限制导致的。在MySQL中,`utf8mb4`字符集每个字符占用4个字节,而`utf8`字符集每个字符占用3个字节。因此,当使用`utf8mb4`字符集时,索引的最大长度会减少。

具体来说,MySQL的InnoDB存储引擎对索引的最大长度限制是767字节。如果你尝试创建一个索引,而这个索引的总长度超过了767字节,就会出现这个错误。

### 解决方法

1. **减少索引长度**:
   你可以通过减少索引的长度来避免这个问题。例如,如果你有一个`VARCHAR(255)`的字段,并且你想在这个字段上创建索引,你可以将索引长度减少到191(因为 `191 * 4 = 764`,小于767字节)。

  
  1. ALTER TABLE appbyme_config MODIFY column_name VARCHAR(191);
复制代码


2. **使用前缀索引**:
   如果你不想减少字段的长度,可以使用前缀索引。前缀索引只对字段的前N个字符进行索引。

  
  1. ALTER TABLE appbyme_config ADD INDEX idx_column_name (column_name(191));
复制代码


3. **修改表的字符集**:
   如果你不需要`utf8mb4`字符集,可以将表的字符集改回`utf8`。

  
  1. ALTER TABLE appbyme_config CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
复制代码


4. **升级MySQL版本**:
   如果你使用的是MySQL 5.7或更高版本,并且使用的是InnoDB存储引擎,你可以通过修改`innodb_large_prefix`参数来增加索引的最大长度。这个参数允许索引长度达到3072字节。

  
  1. SET GLOBAL innodb_large_prefix = ON;
复制代码


   然后,你需要确保表的行格式是`DYNAMIC`或`COMPRESSED`:

  
  1. ALTER TABLE appbyme_config ROW_FORMAT=DYNAMIC;
复制代码


### 具体操作步骤

假设你正在升级Discuz!,并且遇到了这个问题,你可以按照以下步骤操作:

1. **备份数据库**:
   在进行任何操作之前,请务必备份你的数据库。

2. **修改表结构**:
   根据上述方法之一修改表结构。例如,如果你选择减少索引长度:

  
  1. ALTER TABLE appbyme_config MODIFY column_name VARCHAR(191);
复制代码


3. **重新运行升级脚本**:
   修改完表结构后,重新运行升级脚本。

### 总结

这个错误通常是由于MySQL的索引长度限制引起的,特别是在使用`utf8mb4`字符集时。通过减少索引长度、使用前缀索引、修改字符集或升级MySQL版本,你可以解决这个问题。希望这些方法能帮助你顺利完成升级。

如果你有其他问题,欢迎继续提问!
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复

回复

 懒得打字嘛,点击右侧快捷回复【查看最新发布】   【应用商城享更多资源】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

AI智能体
投诉/建议联系

discuzaddons@vip.qq.com

未经授权禁止转载,复制和建立镜像,
如有违反,按照公告处理!!!
  • 联系QQ客服
  • 添加微信客服

联系DZ插件网微信客服|最近更新|Archiver|手机版|小黑屋|DZ插件网! ( 鄂ICP备20010621号-1 )|网站地图 知道创宇云防御

您的IP:3.17.157.223,GMT+8, 2025-4-6 04:24 , Processed in 0.354966 second(s), 80 queries , Gzip On, Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2025 Discuz! Team.

关灯 在本版发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表