SQLite语法与MySQL不兼容?

时间:2012-02-11 21:03:50

标签: php mysql sql sqlite pdo

我正在使用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数据库中运行。)

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

5 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分:5)

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

答案 2 :(得分:4)

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

答案 3 :(得分:3)

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

答案 4 :(得分:2)

不,它们支持完全不同的功能集。最重要的区别是SQLite使用dynamic data types而MySQL使用static data types,但也有许多其他差异。

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