2012-02-11 24 views
6

estoy usando DOP y tratando de hacer mi soporte de aplicaciones tanto MySQL y SQLite, pero en sqlite me sale este error cuando intento importar mi esquema de base de datos:Sintaxis SQLite no compatible con MySQL?

SQLSTATE[HY000]: General error: 1 near "AUTO_INCREMENT": syntax error

La consulta es el siguiente:

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; 

(y funciona en una base de datos MySQL.)

no entiendo cuál es el problema aquí? ¿No deberían ser compatibles ambos sistemas de bases de datos?

+0

[documentación SQLite AutoIncrement] (http://www.sqlite.org/autoinc.html) - autoincrement se no ANSI, secuencias eran sólo recientemente hizo ANSI para manejar la generación de valor secuencial. –

+0

¿Qué te hizo pensar que eran lo mismo? Cada RDBMS parece tener su propio pequeño giro, por lo que te encontrarás con este tipo de problemas. Aquí está la documentación de sqlite en AUTOINCREMENT: http://www.sqlite.org/autoinc.html –

Respuesta

2

No, admiten un conjunto de funciones completamente diferente. La diferencia más significativa es que SQLite usa dynamic data types mientras que MySQL usa static data types, pero también hay muchas otras diferencias.

Sin embargo, ambos admiten un subconjunto común de SQL, por lo que es posible escribir algunas sentencias SQL simples que funcionarán en ambos sistemas.

5

AUTO_INCREMENT es específico de MySQL. SQLite aparentemente tiene algo similar, AUTOINCREMENT.

+0

bien, lo cambié pero ahora obtengo el mismo error ... 'cerca de" AUTOINCREMENT ":' – Alex

+2

Puede que tenga que decir como ' id INT NOT NULL LLAVE PRIMARIA AUTOINCREMENT'. Nunca me he molestado con SQLite; Solo sé cómo googlear. :) – cHao

+0

Me las arreglé para arreglar todos los errores tx :) – Alex

4

Ellos deben ser compatibles en cuanto a los estándares ANSI SQL, y todas las bases de datos SQL deben adherirse a eso. Sin embargo, AutoIncrement no es parte de ese estándar, sino una característica extra implementada por algunas bases de datos (incluyendo MySQL). No todas las bases de datos proporcionan esa característica, o pueden proporcionarla de una manera diferente o con una sintaxis diferente.

3

Lamentablemente, aunque SQL debe ser un estándar, cada implementación de base de datos es diferente y tiene sus propias peculiaridades, por lo que debe organizar su consulta para que funcione en SQLite.

Cuestiones relacionadas