首页 > 解决方案 > 从 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 的错误。

任何帮助将不胜感激。

标签: mysqlsqlsqlite

解决方案


实际上,您需要做的唯一更改是使用AUTO_INCREMENTSQLite 的关键字来代替,AUTOINCREMENT并且您的语句在 MySql 中也可以正常工作。
请参阅演示

但是你最好不要使用MySql的TEXT数据类型。
SQLite 只有一种数据类型用于存储字符串,这就是TEXT数据类型。
另一方面,MySql 支持存储字符串值VARCHARCHAR数据类型。
如果列不包含非常长的字符串,则首选数据类型是VARCHARand not TEXT
您可以在这些线程中找到有关 2 种数据类型差异的更多信息:

所以一个有意义的声明是:

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

您可以将数字替换为每列的最大预期长度10VARCHAR(10)


推荐阅读