У меня возникли проблемы с переходом с синтаксиса sqlite на синтаксис mysql. Кто-нибудь знает ресурс, показывающий базовый синтаксис в sqlite и его эквивалент в mysql?
В моем конкретном случае я хочу преобразовать этот код sqlite в код mysql:
DROP TABLE IF EXISTS post;
CREATE TABLE post (
a INTEGER PRIMARY KEY AUTOINCREMENT,
b TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
c TEXT NOT NULL,
d TEXT NOT NULL,
e TEXT NOT NULL,
f TEXT NOT NULL,
g TEXT NOT NULL,
h TEXT NOT NULL,
i TEXT,
j TEXT NOT NULL,
k TEXT,
l TEXT NOT NULL,
m TEXT NOT NULL
);
На данный момент я сделал это:
УДАЛИТЬ ТАБЛИЦУ, ЕСЛИ СУЩЕСТВУЕТ пост;
CREATE TABLE post (
a INT AUTO_INCREMENT PRIMARY KEY,
b CURRENT_TIMESTAMP(),
c TEXT NOT NULL,
d TEXT NOT NULL,
e TEXT NOT NULL,
f TEXT NOT NULL,
g TEXT NOT NULL,
h TEXT NOT NULL,
i TEXT,
j TEXT NOT NULL,
k TEXT,
l TEXT NOT NULL,
m TEXT NOT NULL
);
Но я получил ошибки с CURRENT_TIMESTAMP() и TEXT.
Любая помощь будет высоко оценен.
Синтаксис MySQL (в переводе с https://www.jooq.org/translate/):
drop table if exists post;
create table post (
a int not null auto_increment,
b timestamp not null default current_timestamp(),
c text not null,
d text not null,
e text not null,
f text not null,
g text not null,
h text not null,
i text,
j text not null,
k text,
l text not null,
m text not null,
primary key (a)
);
На самом деле единственное изменение, которое вам нужно сделать, это использовать AUTO_INCREMENT
вместо ключевого слова SQLite AUTOINCREMENT
, и ваше выражение будет нормально работать и в MySql.
Смотрите демо.
Но лучше не использовать тип данных MySql TEXT.
SQLite имеет только 1 тип данных для хранения строк, и это TEXT
тип данных.
С другой стороны, MySql поддерживает типы данных VARCHAR и CHAR для хранения строковых значений.
Если столбец не содержит очень длинных строк, предпочтительным типом данных является VARCHAR
, а не TEXT
.
Вы можете узнать больше о различиях двух типов данных в этих темах:
Таким образом, утверждение, которое имело бы смысл:
CREATE TABLE post (
a INTEGER PRIMARY KEY AUTO_INCREMENT,
b TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
c VARCHAR(10) NOT NULL,
d VARCHAR(10) NOT NULL,
e VARCHAR(10) NOT NULL,
f VARCHAR(10) NOT NULL,
g VARCHAR(10) NOT NULL,
h VARCHAR(10) NOT NULL,
i VARCHAR(10),
j VARCHAR(10) NOT NULL,
k VARCHAR(10),
l VARCHAR(10) NOT NULL,
m VARCHAR(10) NOT NULL
);
Вы можете заменить число 10
в VARCHAR(10)
максимальной ожидаемой длиной для каждого из столбцов.