此查询是针对php 5.7脚本进行的,不再起作用,我的提供商是one.com,这是他们使用的方式:PHP Versie:7.1.30 MySQL版本:10.3.14-MariaDB-1:10.3.14 + maria〜bionic
在这里已经无数次地寻求答案了,通常我会解决它,但是这个让我很伤心!尝试过DB Fiddle,他们总是会遇到相同的错误:
查询错误:错误:SQLITE_ERROR:在“ KEY”附近:语法错误,并且,查询错误:错误:SQLITE_ERROR:在“ unsigned”附近:语法错误
CREATE TABLE IF NOT EXISTS `bo_hourly` (
`time` int(15) NOT NULL,
`strikes` int(6) NOT NULL,
`st_strikes` int(8) NOT NULL,
UNIQUE KEY `time` (`time`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS `bo_stat` (
`date` date NOT NULL,
`strikes` mediumint(11) unsigned NOT NULL DEFAULT '0',
`maxdist` int(6) NOT NULL DEFAULT '0',
`mindist` int(6) NOT NULL DEFAULT '999999',
`maxstrikes` mediumint(11) unsigned NOT NULL DEFAULT '0',
`maxtime` int(15) unsigned NOT NULL DEFAULT '0',
`maxusers` int(6) NOT NULL DEFAULT '0',
`st_strikes` int(8) NOT NULL,
`st_mindist` int(6) NOT NULL DEFAULT '999999',
`st_maxdist` int(6) NOT NULL DEFAULT '0',
`st_max` int(6) NOT NULL,
`st_maxtime` int(15) NOT NULL,
KEY `time` (`date`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
我知道它一定很简单,但是靠近“键”和“未签名”的地方似乎是错误的,如果有人在途中可以帮助我,也许我搜索得太牵强了...
答案 0 :(得分:1)
有效的SQLite代码如下所示,与您的MySQL代码匹配。
请注意,MySQL中的int(6)
和int(8)
仍然存储相同的(最大)信息,这取决于zerofill ...
int(6)
不会存储999999
的最大值,当我查看默认值时,您可能会想到。
如果您想要或需要限制最大值,我建议您查看CHECK Constraint
,这在CREATE TABLE ... syntax
CREATE TABLE IF NOT EXISTS bo_hourly (
time int NOT NULL,
strikes int NOT NULL,
st_strikes int NOT NULL,
UNIQUE (time)
);
CREATE TABLE IF NOT EXISTS bo_stat (
date date NOT NULL,
strikes int NOT NULL DEFAULT '0',
maxdist int NOT NULL DEFAULT '0',
mindist int NOT NULL DEFAULT '999999',
maxstrikes int NOT NULL DEFAULT '0',
maxtime int NOT NULL DEFAULT '0',
maxusers int NOT NULL DEFAULT '0',
st_strikes int NOT NULL,
st_mindist int NOT NULL DEFAULT '999999',
st_maxdist int NOT NULL DEFAULT '0',
st_max int NOT NULL,
st_maxtime int NOT NULL
);
# There is no column time in the bo_stat table
# CREATE INDEX IF NOT EXISTS time ON bo_stat(time);
请参阅demo
答案 1 :(得分:0)
我相信一次紧密转换所需的最小更改(请参见注释)将导致以下代码(在注释栏中注明已添加的代码):-
CREATE TABLE IF NOT EXISTS `bo_hourly` (
`time` int(15) NOT NULL,
`strikes` int(6) NOT NULL,
`st_strikes` int(8) NOT NULL,
UNIQUE /*KEY `time`*/ (`time`)
) /*ENGINE=MyISAM DEFAULT CHARSET=latin1*/;
CREATE TABLE IF NOT EXISTS `bo_stat` (
`date` date NOT NULL,
`strikes` mediumint(11) /*unsigned*/ NOT NULL DEFAULT '0',
`maxdist` int(6) NOT NULL DEFAULT '0',
`mindist` int(6) NOT NULL DEFAULT '999999',
`maxstrikes` mediumint(11) /*unsigned*/ NOT NULL DEFAULT '0',
`maxtime` int(15) /*unsigned*/ NOT NULL DEFAULT '0',
`maxusers` int(6) NOT NULL DEFAULT '0',
`st_strikes` int(8) NOT NULL,
`st_mindist` int(6) NOT NULL DEFAULT '999999',
`st_maxdist` int(6) NOT NULL DEFAULT '0',
`st_max` int(6) NOT NULL,
`st_maxtime` int(15) NOT NULL/*,
KEY `time` (`date`)
*/)/* ENGINE=MyISAM DEFAULT CHARSET=utf8*/;
-- ADDED
CREATE INDEX IF NOT EXISTS `time` ON `bo_stat`(`date`);
基本上
SQlite没有KEY关键字,而是隐式(例如使用UNIQUE)索引或显式定义的索引(根据添加的行)。
无符号由于语法上的细微差别而用括号括起来,因此变成语法错误,它期望它们是列类型的最后一个值(例如,mediumint unsigned实际上可以工作)。因此,未签名者已被注释掉。
ENGINE = MyISAM 在SQLite中不是有效的子句(已注释掉)