我在从 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
);
目前,我是这样做的:
DROP TABLE IF EXISTS 帖子;
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 中也能正常工作。
查看demo .
但是你最好不要用MySql的TEXT
数据类型。
SQLite 只有一种数据类型用于存储字符串,这是 TEXT
数据类型。
另一方面,MySql 支持 VARCHAR
and CHAR
用于存储字符串值的数据类型。
如果列不包含很长的字符串,则首选数据类型是 VARCHAR
而不是 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
);
您可以将 VARCHAR(10)
中的数字 10
替换为每列的最大预期长度。
关于mysql - 从sqlite语法到mysql语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65269932/