mysql - 从sqlite语法到mysql语法

标签 mysql sql sqlite

我在从 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/

相关文章:

php - 投票系统多个答案

java - 从其他电脑连接到本地Mysql服务器

c# - 我应该将图像作为二进制信息还是作为 FS 上的路径保存到数据库本身?

ios - 调整嵌入 ScrollView 内的网页 View 的大小

mysql - 无法在 MySQL 上创建 View

mysql - SQL 创建一个包含添加行的计算列的 View

sql - 将数据从行合并到列

SQL:使用分区作为求和条件

mysql - 如何使用 MySQL 中最新关联记录的 id 更新外键

在临时表上创建索引的 SQLite 语法?