如何解决ALTER TABLE causes auto_increment resequencing ?

分类:工作记,问题集 | 作者:凹凸曼 | 发表于2015/10/31

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

 

本文出自 “凹凸曼” 博客,请务必保留此出处 http://www.apoyl.com/?p=1974

日志信息 »

该日志于2015-10-31 12:42由 凹凸曼 发表在工作记, 问题集分类下, 你可以发表评论。除了可以将这个日志以保留源地址及作者的情况下引用到你的网站或博客,还可以通过RSS 2.0订阅这个日志的所有评论。

目前盖楼 (0)层:

发表评论 »

« »