не может конвертировать sql в sqlite - PullRequest
1 голос
/ 27 июня 2019

этот запрос был сделан для скрипта php 5.7 и больше не работает, мой провайдер one.com, и вот что они используют: Версия PHP: 7.1.30 Версия для MySQL: 10.3.14-MariaDB-1: 10.3.14 + мария ~ бионическая

Уже много раз была здесь, чтобы найти ответы, и обычно я ее исправляю, но эта ломает мне голову!Пробовал БД 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;

Я знаю, что это должно быть просто, но что-то рядом с «ключом» и «без знака», кажется, неправильно, если кто-то может помочь мне в пути, возможно, я тоже ищунадуманный ...

Ответы [ 2 ]

1 голос
/ 27 июня 2019

Действительный код SQLite может выглядеть ниже, который соответствует вашему коду MySQL.

Обратите внимание, что int(6) и int(8) в MySQL по-прежнему хранят ту же (макс.) Информацию, которая зависит от zerofill ...

int(6) не хранит максимальное отключение 999999, о котором вы могли подумать, когда я смотрю на значения по умолчанию. если вы хотите или хотите ограничить максимальные значения, я предлагаю вам посмотреть CHECK Constraint, что также объясняется в синтаксисе CREATE TABLE ...

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); 

см. демо

0 голосов
/ 27 июня 2019

Я полагаю, что минимальные изменения, которые потребуются для близкого преобразования (см. Примечания), приведут к следующему коду (запретите комментарий, чтобы указать код, который был ДОБАВЛЕН): -

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), либо явно определены (согласно добавленной строке).

  • unsigned становится синтаксической ошибкой из-за нюанса со значениями, заключенными в круглые скобки, он ожидает, что они будут последними значениями типа столбца (например, unsigned mediumint на самом деле будет работать). Как таковой неподписанный был закомментирован.

  • ENGINE = MyISAM не является допустимым предложением в SQLite (закомментировано)

  • DEFAULT CHARSET не поддерживается в SQLite (закомментировано).
    • Поддержка кодировки символов SQLite ограничена, Кодировка PRAGMA объясняет немного.
  • Заключительная запятая, обозначающая дополнительный пункт, закомментирована.
  • Последняя закрывающая скобка не была закомментирована
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...