【问题标题】:From sqlite syntax to mysql syntax从 sqlite 语法到 mysql 语法
【发布时间】:2021-03-23 23:11:01
【问题描述】:

我在从 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 sql sqlite


    【解决方案1】:

    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<>fiddle demo

    【讨论】:

      【解决方案2】:

      实际上,您唯一需要做的更改是使用AUTO_INCREMENT 而不是SQLite 的AUTOINCREMENT 关键字,您的语句也可以在MySql 中正常工作。
      请参阅demo

      但是你最好不要使用MySql的TEXT数据类型。
      SQLite 只有一种数据类型用于存储字符串,这是 TEXT 数据类型。
      另一方面,MySql 支持 VARCHAR and 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
      );
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-03-03
        • 2021-04-10
        • 2022-12-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多