SQLite语法与MySQL不兼容


SQLite syntax not compatible with MySQL?

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

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

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

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

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

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

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

不,它们支持一组完全不同的功能。最显著的区别是SQLite使用动态数据类型,而MySQL使用静态数据类型,但也有许多其他区别。

然而,它们都支持SQL的一个子集,因此可以编写一些在两个系统中都能工作的简单SQL语句。