SQLite语法与MySQL不兼容?

7

我正在使用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标准化以处理顺序值生成。 - OMG Ponies
你为什么觉得它们是一样的呢?每个关系型数据库似乎都有自己的小细节,所以你会遇到这种问题。这里是关于AUTOINCREMENT的SQLite文档链接:http://www.sqlite.org/autoinc.html - J Cooper
5个回答

10

6

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


5

AUTO_INCREMENT 是 MySQL 特有的。SQLite 似乎也有类似的功能,叫做 AUTOINCREMENT


好的,我已经更改了,但现在我收到相同的错误信息...“near 'AUTOINCREMENT':” - Alex
3
你可能需要这样写:id INT NOT NULL PRIMARY KEY AUTOINCREMENT。我从未费心去学习SQLite;我只知道如何使用Google。 :) - cHao

3

不幸的是,尽管SQL应该是一个标准,但每个数据库实现都有其独特之处,因此您需要调整查询以使其在SQLite上运行。


2
不,它们支持完全不同的功能集。最显著的区别是SQLite使用动态数据类型,而MySQL使用静态数据类型,但还有许多其他差异。
但是,它们都支持一组共同的SQL子集,因此可以编写一些简单的SQL语句,在两个系统中都可以工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接