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

导入数据库表#1071 - Specified key was too long; max key length is 1000 bytes

529 3
发表于 2021-9-13 10:20:24 | 查看全部 阅读模式

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

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

×
导入数据库表#1071 - Specified key was too long; max key length is 1000 bytes报错的解决办法:

如图所示:
导入数据库表#1071 - Specified key was too long; max key length is 1000 bytes 导入,数据,数据库,数据库表,解决


问题原因:
常见是由于你社区数据库引擎是InnoDB或utf8mb4或discuz x3.5类型,而导入的表是ENGINE=MyISAM造成的,

解决办法:
编辑要导入的.sql语句文件,
查找:
游客,如果您要查看本帖隐藏内容请回复


改为:
游客,如果您要查看本帖隐藏内容请回复


保存后,重新导入即可正常。
我要说一句 收起回复
一花一世界,一叶一追寻。一曲一场叹,一生为一人。

评论3

dnzkbzzjLv.2 发表于 2024-6-8 14:05:23 | 查看全部 | Edg | Windows 10
感谢分享
我要说一句 收起回复
回复

使用道具 举报

Discuz智能体Lv.8 发表于 2025-3-13 09:36:39 | 查看全部
在解决Discuz! 数据库导入出现的 `#1071 - Specified key was too long` 错误时,需综合以下方法处理:

---

### **问题根源分析**
1. **存储引擎差异**  
   MyISAM引擎默认索引键长度上限为1000字节,而InnoDB在MySQL 5.7+版本支持最大3072字节(需配置`innodb_large_prefix`)。若原SQL文件使用`ENGINE=MyISAM`但当前数据库为InnoDB,可能触发此问题。

2. **字符集影响**  
   `utf8mb4`字符集(每个字符4字节)会导致索引实际长度增加。例如,`VARCHAR(255)`字段在`utf8mb4`下占用 `255×4=1020字节`,超出MyISAM限制。

3. **索引字段过长**  
   复合索引或多个长字段联合索引可能累计超出限制。

---

### **专业解决方案**

#### **方法1:修改存储引擎(推荐)**
- **步骤**  
  编辑SQL文件,替换所有 `ENGINE=MyISAM` 为 `ENGINE=InnoDB`,并确保MySQL版本≥5.7。  
  **注意**:检查表是否依赖MyISAM特性(如全文索引),建议Discuz!核心表保留原引擎。

#### **方法2:调整索引长度**
- **缩短字段长度**  
  修改表结构,减少索引字段长度(如`VARCHAR(255)`→`VARCHAR(250)`)。
- **前缀索引**  
  为长字段添加前缀限制(需权衡查询性能):
  1. ALTER TABLE pre_forum_post
  2.   ADD INDEX idx_subject (subject(191));
复制代码


#### **方法3:优化字符集**
- **统一字符集**  
  若无需支持emoji,可将字符集改为`utf8`(需全局一致):
  1. ALTER TABLE pre_forum_post
  2.   CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
复制代码


#### **方法4:配置MySQL参数**
1. 启用大前缀支持:
  
  1. SET GLOBAL innodb_large_prefix = ON;
  2.    SET GLOBAL innodb_file_format = 'Barracuda';
复制代码

2. 修改表行格式:
  
  1. ALTER TABLE pre_forum_post ROW_FORMAT=DYNAMIC;
复制代码


#### **方法5:分步处理复杂表**
- **手动重建表结构**  
  单独导出问题表结构,调整索引后导入数据:
  1. -- 导出数据(无结构)
  2.   mysqldump -u root -p --no-create-info dbname pre_forum_post > data.sql

  3.   -- 编辑结构文件,调整索引后导入
  4.   mysql -u root -p dbname < structure_fixed.sql
  5.   mysql -u root -p dbname < data.sql
复制代码


---

### **Discuz! 场景适配**
- **插件/模板兼容性**  
  若问题源于第三方扩展,建议联系DZ插件网(www.dz-x.net)开发者优化SQL脚本。
- **核心表保护**  
  Discuz! 核心表(如`pre_common_setting`)勿轻易修改引擎,避免功能异常。

---

### **操作后验证**
1. 执行`SHOW CREATE TABLE pre_forum_post;` 确认引擎和索引。
2. 检查Discuz! 后台是否有功能异常。
3. 使用`EXPLAIN`验证查询是否命中调整后的索引。

通过以上方法可系统性解决索引长度问题,同时确保Discuz! 站点稳定运行。如需进一步排查,可提供具体表结构及MySQL版本信息。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复
Discuz智能体Lv.8 发表于 2025-3-13 09:39:04 | 查看全部
关于Discuz网站在导入数据库时出现 **#1071 - Specified key was too long** 的错误,以下是详细分析和解决方案:

---

### **问题原因**
1. **字符集与索引长度冲突**  
   - 当使用 `utf8mb4` 字符集(Discuz X3.5 默认)时,每个字符占 **4字节**。若索引字段的字符长度总和超过引擎限制(如 `InnoDB` 默认的 `767字节`),会触发此错误。
   - 例如:`varchar(255)` 字段的索引长度为 `255 × 4 = 1020字节`,超过 `InnoDB` 的限制。

2. **表引擎差异**  
   - 若原SQL文件使用 `MyISAM` 引擎(支持最大 `1000字节` 的索引长度),而目标数据库为 `InnoDB`(默认限制 `767字节`),直接导入会导致索引超限。

---

### **解决方案**
#### **方法1:调整表引擎(推荐)**
1. 修改SQL文件中的表引擎为 `InnoDB`:
  
  1. ENGINE=MyISAM  →  ENGINE=InnoDB
复制代码

2. **同时检查索引字段长度**(关键步骤):
   - 查找索引定义语句,例如:
   
  1. KEY `idx_name` (`long_field`)
复制代码

   - 若字段为 `varchar(255)`,需缩短长度至 `191`(`191 × 4 = 764字节`):
   
  1. ALTER TABLE pre_table MODIFY COLUMN long_field VARCHAR(191);
复制代码


#### **方法2:修改字符集(备用)**
- 将表字符集改为 `utf8`(每个字符3字节):
  1. DEFAULT CHARSET=utf8mb4  →  DEFAULT CHARSET=utf8
复制代码

  *注:可能导致特殊字符(如Emoji)无法存储,需谨慎选择。*

---

### **高级配置(针对MySQL 5.7+)**
1. 启用 `innodb_large_prefix`(允许更大索引长度):
  
  1. SET GLOBAL innodb_large_prefix = ON;
  2.    SET GLOBAL innodb_file_format = Barracuda;
复制代码

2. 修改表的行格式为 `DYNAMIC`:
  
  1. ROW_FORMAT=DYNAMIC;
复制代码


---

### **操作步骤**
1. 使用文本编辑器打开SQL文件。
2. 全局替换 `ENGINE=MyISAM` 为 `ENGINE=InnoDB`。
3. 检查所有索引字段,确保 `varchar` 长度不超过191。
4. 保存并重新导入数据库。

---

### **关联技术文档**
- 索引优化建议:DZ插件网《Discuz性能调优指南》
- 数据库引擎对比:DZ插件网《InnoDB与MyISAM核心差异》

如需进一步排查,请提供具体表结构(隐藏敏感信息),我将协助分析索引配置。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复

回复

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

本版积分规则

图文热点
关闭

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

AI智能体
投诉/建议联系

discuzaddons@vip.qq.com

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

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

您的IP:18.117.70.50,GMT+8, 2025-4-3 14:27 , Processed in 0.310616 second(s), 92 queries , Gzip On, Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2025 Discuz! Team.

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