【问题标题】:SQLite syntax not compatible with MySQL?SQLite 语法与 MySQL 不兼容?
【发布时间】:2012-03-03 21:11:18
【问题描述】:

我正在使用 PDO 并试图让我的应用程序同时支持 MySQL 和 SQLite,但在 sqlite 中,当我尝试导入我的数据库架构时出现此错误:

SQLSTATE[HY000]: General error: 1 near "AUTO_INCREMENT": syntax error

查询如下所示:

CREATE TABLE events (

  id INT UNSIGNED NOT NULL AUTO_INCREMENT,
  name VARCHAR(32) NOT NULL,
  title VARCHAR(64) NOT NULL,
  description LONGTEXT,
  starttime DATETIME DEFAULT '0000-00-00 00:00:00',

  PRIMARY KEY(id),
  KEY name(name)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

(它可以在 MySQL 数据库中使用。)

我不明白这里有什么问题?两个数据库系统不应该兼容吗?

【问题讨论】:

  • SQLite AUTOINCREMENT documentation - 自动增量不是 ANSI,序列最近才被 ANSI 用于处理序列值生成。
  • 是什么让你觉得他们是一样的?每个 RDBMS 似乎都有它自己的小转折,所以你会遇到这类问题。这是关于 AUTOINCREMENT 的 sqlite 文档:sqlite.org/autoinc.html

标签: php mysql sql sqlite pdo


【解决方案1】:

http://www.sqlite.org/autoinc.html

在 SQLite 中它被称为 AUTOINCREMENT,而不是 AUTO_INCREMENT

【讨论】:

    【解决方案2】:

    不幸的是,虽然 SQL 应该是一个标准,但每个数据库的实现都是不同的并且有自己的特点,所以你必须安排你的 Query 使其在 SQLite 上工作。

    【讨论】:

      【解决方案3】:

      它们应该在 ANSI SQL 标准方面兼容,并且所有 SQL 数据库应该遵守这一点。但是,AutoIncrement 不是该标准的一部分,而是一些数据库(包括 MySQL)实现的额外功能。并非所有数据库都提供该功能,或者可能以不同的方式或不同的语法提供。

      【讨论】:

        【解决方案4】:

        AUTO_INCREMENT 是特定于 MySQL 的。 SQLite 显然也有类似的东西,AUTOINCREMENT。

        【讨论】:

        • 好的,我改变了,但现在我得到了同样的错误...near "AUTOINCREMENT":
        • 你可能不得不说像id INT NOT NULL PRIMARY KEY AUTOINCREMENT。我从来没有为 SQLite 烦恼过;我只知道如何谷歌。 :)
        【解决方案5】:

        不,它们支持一组完全不同的功能。最显着的区别是 SQLite 使用 dynamic data types 而 MySQL 使用 static data types,但也有许多其他区别。

        但是它们都支持 SQL 的一个公共子集,因此可以编写一些在两个系统中都可以使用的简单 SQL 语句。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-04-22
          • 1970-01-01
          • 2021-01-15
          • 1970-01-01
          • 2017-05-12
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多