今天用discuz建了个网站,建立、后台、登录都ok没有问题,就是在发帖的时候提示错误数据库错误1146了,在看了好几位大佬的帖子之后终于把这个问题解决了,以此贴记录一下过程与步骤。
1.点击发帖之后提示数据库错误(1146),因为已经解决的就没有截图了额,分析后是因为数据库缺少一张表导致的表名 pre_forum_post 然后我用navicat连接数据库之后查了一下,还真的没有。。。 ok,接下来我们找到下载的安装包通过目录\upload\install\data\install.sql 找到sql文件,然后用notepad打开,找到 pre_forum_post 这张表的建表sql复制下来,再用navicat去执行。这段思路来自discuz论坛 http://www.discuz.net/thread-3606350-1-1.html 可查看原帖
2.但是执行又报错
看到这个错误提示我一开始以为是类型错误,把另外几个类型都试了一遍,结果依然是一样的,然后接着去百度终于找到了答案,原来是mysql的版本问题,5.1之后这个语句已经不支持了0.0.0.0换了种语法,把TYPE=MyISAM 改成ENGINE=MyISAM 就可以了,详情可看https://www.jianshu.com/p/8dc6eade220f
3.改完之后以为终于可以了,然而,现实是无情的。error虽小,但很气啊。改完之后又提示there can be only one auto column and it must be defined as a key,翻译之后大概就是一个表里面只能有一个列是自增属性 AUTO_INCREMENT 且为主键,回去看代码
DROP TABLE IF EXISTS pre_forum_post;
CREATE TABLE pre_forum_post (
pid int(10) unsigned NOT NULL,
fid mediumint(8) unsigned NOT NULL DEFAULT '0',
tid mediumint(8) unsigned NOT NULL DEFAULT '0',
`first` tinyint(1) NOT NULL DEFAULT '0',
author varchar(15) NOT NULL DEFAULT '',
authorid mediumint(8) unsigned NOT NULL DEFAULT '0',
`subject` varchar(80) NOT NULL DEFAULT '',
dateline int(10) unsigned NOT NULL DEFAULT '0',
message mediumtext NOT NULL,
useip varchar(15) NOT NULL DEFAULT '',
`port` smallint(6) unsigned NOT NULL DEFAULT '0',
invisible tinyint(1) NOT NULL DEFAULT '0',
anonymous tinyint(1) NOT NULL DEFAULT '0',
usesig tinyint(1) NOT NULL DEFAULT '0',
htmlon tinyint(1) NOT NULL DEFAULT '0',
bbcodeoff tinyint(1) NOT NULL DEFAULT '0',
smileyoff tinyint(1) NOT NULL DEFAULT '0',
parseurloff tinyint(1) NOT NULL DEFAULT '0',
attachment tinyint(1) NOT NULL DEFAULT '0',
rate smallint(6) NOT NULL DEFAULT '0',
ratetimes tinyint(3) unsigned NOT NULL DEFAULT '0',
`status` int(10) NOT NULL DEFAULT '0',
tags varchar(255) NOT NULL DEFAULT '0',
`comment` tinyint(1) NOT NULL DEFAULT '0',
replycredit int(10) NOT NULL DEFAULT '0',
position int(8) unsigned NOT NULL AUTO_INCREMENT,
PRIMARY KEY (tid,position),
UNIQUE KEY pid (pid),
KEY fid (fid),
KEY authorid (authorid,invisible),
KEY dateline (dateline),
KEY invisible (invisible),
KEY displayorder (tid,invisible,dateline),
KEY `first` (tid,`first`)
) TYPE=MyISAM;
然后我先看有几个类设置了自增属性 结果发现之后 position 这一个列设置了自增,然后去看主键那行 PRIMARY KEY (tid,position) 一开始我以为tid是啥参数来着(原谅我的无知)后来想着不对,往上一看 tid mediumint(8) unsigned NOT NULL DEFAULT ‘0’ 它居然是一个列±+ 删掉,再次运行,果断ok。 从知道上看的解答https://zhidao.baidu.com/question/620246702994010132.html