我正在使用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语句。