Discuz升级3.5后,能发帖不能回复,显示Duplicate entry错误
这几天更新网站,程序系统从Discuz3.4升级为3.5,本来是欢天喜地的大好事,想不到由于新版本太新,漏洞的BUG颇多,造成了很多的困扰,现在将一个比较难搞定的问题分享一下,希望对遇到同样问题的朋友有所帮助。这个问题就是:discuz升级3.5后,发帖正常,回复直接出错,显示:
Discuz! Database Error
(1062) Duplicate entry '0-XXXX' for key 'PRIMARY'这样的错误信息。
于是把SQL直接拿到数据库里面去执行,发现报错:
提示是pre_forum_post表有些字段缺少默认值,于是根据提示把字段加上了默认值,加了好几个。
再运行,提示position字段有问题。
对比发现,3.4的position字段是: `position` int(8) unsigned NOT NULL AUTO_INCREMENT,
而升级后3.5的position字段是:`position` int(10) unsigned NOT NULL,成了非自增字段!问题肯定就出在这里了。
于是,把position字段重新设置成了AUTO_INCREMENT,并把更新后一些新的记录的position值手动设置了一下,保存。
重新提交数据,成功啦!能够正常回复啦!问题解决啦!
不过,上面字段属性差异到底是我升级中出现故障造成的,还是官方的代码瑕疵,这个不得而知。 刚才仔细看了官方的表更新语句,没有什么问题,查看站长-数据库-校验,这里面的问题。本来是正确的结构,校验出错了,如果选择修复就完蛋了,在官方更新前,千万别选修复。
这个我再说明一下,这不是官方BUG,是N年前可能自己修改了post表,造成与官方表结构不一致,从而导致了后面的一系列错误。官方的数据库校验也木有问题。当然,如果你以前也修改过表,出了能发帖不能回帖的问题,可以参考上面的方法解决。不过,强烈建议还是以官方的数据结构为准。我都改过来了。
页:
[1]