如何解决ALTER TABLE causes auto_increment resequencing ?

guiyun affiliate

升级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) 这个类型范围,  升级的时候,跳过的这个执行语句就行了。


guiyun affiliate

作者头像
南宫俊逸创始人

君子好学,自强不息~

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

发表评论