mysql - 从 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 的错误。
任何帮助将不胜感激。
解决方案
实际上,您需要做的唯一更改是使用AUTO_INCREMENT
SQLite 的关键字来代替,AUTOINCREMENT
并且您的语句在 MySql 中也可以正常工作。
请参阅演示。
但是你最好不要使用MySql的TEXT
数据类型。
SQLite 只有一种数据类型用于存储字符串,这就是TEXT
数据类型。
另一方面,MySql 支持存储字符串值VARCHAR
的CHAR
数据类型。
如果列不包含非常长的字符串,则首选数据类型是VARCHAR
and 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
);
您可以将数字替换为每列的最大预期长度10
。VARCHAR(10)
推荐阅读
- node.js - Passport Github 登录 MERN 应用程序(在 Redux 中管理 Auth)
- python - 我怎么能安装健身房。在 Anaconda 上(Mac OS)
- symfony - Symfony 5 Mailer 使用 liipimagine_filter 嵌入图像
- database - 存储和读取大量位置数据的最佳数据库类型
- ruby - asdf 不会根据工具版本或使用本地命令切换本地版本
- ruby - 将逗号分隔的字符串转换为 YAML 结构并合并到现有的 YAML
- deployment - 关于部署模型和训练用户数据的问题
- typescript - 如何将对象的部分属性键提取为联合类型?
- powershell - 在 PowerShell 中播放内存中的 MP3 音频流,而不是从文件中播放
- visual-studio - 当我键入它们时,Visual Studio 会删除我的胡萝卜前面的单词