从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支持用于存储字符串值的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
);
您可以将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;小提琴演示