如何解决ALTER TABLE causes auto_increment resequencing ?

升级Discuz! X2.5 到 Discuz! X3.2 升级过程中遇到如下错误:

升级SQL语句:

升级表 pre_home_notification 出错,请手工执行以下升级语句后,再重新运行本升级程序:
ALTER TABLE pre_home_notification CHANGE `id` `id` mediumint(8) unsigned NOT NULL AUTO_INCREMEN
Error: ALTER TABLE causes auto_increment resequencing, resulting in duplicate entry ‘16777215’ for key ‘PRIMARY’
Errno.: 1062

按照官网的手动的方法执行一样报错。

接下来我进入数据库查看 此表的结构 ,就明白了。

>show create table  pre_home_notification

| pre_home_notification | CREATE TABLE `pre_home_notification` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`uid` mediumint(8) unsigned NOT NULL DEFAULT ‘0’,
`type` varchar(20) NOT NULL DEFAULT ”,
`new` tinyint(1) NOT NULL DEFAULT ‘0’,
`authorid` mediumint(8) unsigned NOT NULL DEFAULT ‘0’,
`author` varchar(15) NOT NULL DEFAULT ”,
`note` text NOT NULL,
`dateline` int(10) unsigned NOT NULL DEFAULT ‘0’,
`from_id` mediumint(8) unsigned NOT NULL DEFAULT ‘0’,
`from_idtype` varchar(20) NOT NULL DEFAULT ”,
`from_num` mediumint(8) unsigned NOT NULL DEFAULT ‘0’,
`category` tinyint(1) NOT NULL DEFAULT ‘0’,
PRIMARY KEY (`id`),
KEY `from_id` (`from_id`,`from_idtype`),
KEY `uid` (`uid`,`new`),
KEY `category` (`uid`,`category`,`dateline`),
KEY `by_type` (`uid`,`type`,`dateline`)
) ENGINE=MyISAM AUTO_INCREMENT=39274822 DEFAULT CHARSET=gbk |

原因:id原来的类型int(10) 范围 应该上亿数量而更改成mediumint(8) 无符号的范围是0到16777215

本身AUTO_INCREMENT=39274822 已经超过了 更改的类型范围(0到16777215)。

解决办法 :估计官方是为了 优化,如果数据量大一些平台估计很多表都超过mediumint(8) 这个类型范围,  升级的时候,跳过的这个执行语句就行了。


作者头像
南宫俊逸创始人

君子好学,自强不息~

上一篇:如何解决Discuz!数据pre_common_stat报错?
下一篇:linux 命令之 find 使用

发表评论

海外服务器,免备案,中国电信 CN2 GIA 高级回国优化专线

香港云服务器立即订购

4核4G  50G 2M (CN2 GIA)  335/月

8核8G  50G  2M(CN2  GIA)  613/月

香港物理服务器立即订购

Xeon L5630 *2    16GB DDR3    1TB HDD 或 240G SSD  10 Mbps  3IP 1500/月

8 核 16 线程 (2.13GHz)

Xeon E5 2650  16GB DDR3   1TB HDD/240G SSD/500G SSD  10 Mbps  3IP 2000/月

8 核 16 线程 (2.00GHz)