От синтаксиса sqlite к синтаксису mysql

У меня возникли проблемы с переходом с синтаксиса 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.

Любая помощь будет высоко оценен.

Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
3
0
333
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Синтаксис 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)
);

db<>демонстрация скрипки

Ответ принят как подходящий

На самом деле единственное изменение, которое вам нужно сделать, это использовать 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) максимальной ожидаемой длиной для каждого из столбцов.

Другие вопросы по теме