·设为首页收藏本站📧邮箱修改🎁免费下载专区🔐设置/修改密码👽群雄群聊
返回列表 发布新帖

解决DZ-GBK转UTF8编码或升级到Discuz!X3.5或转换为InnoDB pre_forum_post表报错的办法

317 0
发表于 2021-6-9 09:31:19 | 显示全部楼层 阅读模式

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

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

×
解决DZ-GBK转UTF8编码或升级到Discuz!X3.5或转换为InnoDB pre_forum_post表报错的解决办法:

几乎所有PHP+MySQL的开源产品中数据库都是采用MyISAM存储引擎,即使和交易相关的也不例 外,这应该是从查询性能以及安装环境考虑的。InnoDB是为处理巨大数据量时的最大性能设计,在数据量少并发小的情况下MySAM优于INNODB,但 是大数据量以及高并发写入等会导致MySIAM力不从心。

InnoDB有很多良好的特点,比如事务支持、存储 过程、视图、行级锁定等,在并发很多的情况下,InnoDB的表现会比MyISAM优越,所以有时会将一些产品的数据库存储引擎修改为InnoDB,修改 起来其实比较简单,只需要执行:ALTER TABLE `表名` ENGINE = InnoDB;即可,但是在discuz X3.4中表pre_forum_post在转换时会报错,提示#1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key,大意是自增字段必须定义成主键

,查看了一下pre_forum_post表可以 看到自增字段position已经是主键(和tid作为联合主键),有些资料提到对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只 有该字段的索引,但是在MyISAM表中,可以和其他字段一起建立联合索引,其实这也不完全正确,其实也可以作为联合索引,只是该字段必须是索引的第一个 字段,例如表pre_forum_post设置联合主键使用命令PRIMARY KEY (`tid`,`position`)如果设置索引时使用PRIMARY KEY (`position`,`tid`)问题就解决了,解决方案是重建联合索引,

执行
  1. ALTER TABLE pre_forum_post DROP PRIMARY KEY ,ADD PRIMARY KEY ( position, tid ) ;
复制代码


然后再执行

  1. ALTER TABLE `pre_forum_post` ENGINE = InnoDB
复制代码


这样就没有错误了,是不是很简单呢。

我要说一句 收起回复

本帖被以下淘专辑推荐:

一花一世界,一叶一追寻。一曲一场叹,一生为一人。

回复

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

本版积分规则

投诉/建议联系

discuzaddons@vip.qq.com

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

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

您的IP:3.138.125.2,111.170.25.82,GMT+8, 2024-4-20 08:34 , Processed in 0.170920 second(s), 70 queries , Gzip On, Redis On.

Based on Discuz! W1.0 Licensed

© 2001-2024 Discuz! Team.

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