从sqlite语法到mysql语法



从sqlite语法转换到mysql语法时遇到了一些问题。有人知道在sqlite中显示基本语法的资源和在mysql中显示等效语法的资源吗?

在我的特殊情况下,我想将这个sqlite代码转换为mysql-one:

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中出现了错误。

如有任何帮助,我们将不胜感激。

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

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

MySQL中的VARCHAR与TEXT
  • MySQL中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替换为每个列的最大预期长度。

    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<gt;小提琴演示

    最新更新