Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php SQLite语法与MySQL不兼容?_Php_Mysql_Sql_Sqlite_Pdo - Fatal编程技术网

Php SQLite语法与MySQL不兼容?

Php SQLite语法与MySQL不兼容?,php,mysql,sql,sqlite,pdo,Php,Mysql,Sql,Sqlite,Pdo,我正在使用PDO,并试图使我的应用程序同时支持MySQL和SQLite,但在SQLite中,我在尝试导入数据库架构时遇到以下错误: SQLSTATE[HY000]:一般错误:1靠近“自动增量”:语法错误 查询如下所示: CREATE TABLE events ( id INT UNSIGNED NOT NULL AUTO_INCREMENT, name VARCHAR(32) NOT NULL, title VARCHAR(64) NOT NULL, description L

我正在使用PDO,并试图使我的应用程序同时支持MySQL和SQLite,但在SQLite中,我在尝试导入数据库架构时遇到以下错误:

SQLSTATE[HY000]:一般错误:1靠近“自动增量”:语法错误

查询如下所示:

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使用,而MySQL使用,但是还有许多其他的区别


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

AUTO\u INCREMENT
是特定于MySQL的。SQLite显然有一个类似的东西,
AUTOINCREMENT

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

不幸的是,虽然SQL应该是一种标准,但每个数据库实现都是不同的,都有自己的特点,因此您必须安排查询,使其在SQLite上工作。


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

-AUTOINCREMENT不是ANSI,序列最近才被制成ANSI,用于处理顺序值生成。是什么让你认为它们是一样的?每个RDBMS似乎都有自己的小问题,因此您将遇到此类问题。下面是关于自动增量的sqlite文档:好的,我更改了,但是现在我得到了相同的错误…
靠近“自动增量”:
您可能必须说like
id INT NOT NULL主键自动增量
。我从来没有为SQLite烦恼过;我只知道如何用谷歌搜索。:)