2012-02-11 16 views
6

Sto usando DOP e cercando di fare la mia domanda sia il supporto MySQL e SQLite, ma in SQLite ottengo questo errore quando provo ad importare il mio schema di database:Sintassi SQLite non compatibile con MySQL?

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

La query è simile al seguente:

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; 

(e funziona in un database MySQL.)

non capisco quale sia il problema qui? Non dovrebbero entrambi i sistemi di database essere compatibili?

+0

[documentazione SQLite AUTOINCREMENT] (http://www.sqlite.org/autoinc.html) - autoincrement non è ANSI, sequenze sono state solo di recente fatto ANSI per la gestione della generazione di valore sequenziale. –

+0

cosa ti ha fatto pensare che fossero uguali? Ogni RDBMS sembra avere la sua piccola svolta, quindi ti imbatterai in questo tipo di problemi. Ecco la documentazione sqlite su AUTOINCREMENT: http://www.sqlite.org/autoinc.html –

risposta

2

No, supportano un set di funzionalità completamente diverso. La differenza più significativa è che SQLite utilizza dynamic data types mentre MySQL utilizza static data types, ma ci sono anche molte altre differenze.

Tuttavia supportano entrambi un sottoinsieme comune di SQL, quindi è possibile scrivere alcune semplici istruzioni SQL che funzioneranno in entrambi i sistemi.

5

AUTO_INCREMENT è specifico per MySQL. Apparentemente SQLite ha una cosa simile, AUTOINCREMENT.

+0

ok ho cambiato, ma ora ho lo stesso errore ... 'vicino a" AUTOINCREMENT ":' – Alex

+2

Potrebbe darsi che dica ' ID INT NON NULL PRIMARY KEY AUTOINCREMENT'. Non mi sono mai preoccupato di SQLite; so solo come google. :) – cHao

+0

Sono riuscito a correggere tutti gli errori tx :) – Alex

4

Essi dovrebbero essere compatibili per quanto riguarda gli standard ANSI SQL, e tutti i database SQL dovrebbero aderire a tale. Tuttavia, AutoIncrement non fa parte di quello standard, ma una funzionalità aggiuntiva implementata da alcuni database (incluso MySQL). Non tutti i database forniscono questa funzionalità o possono fornirla in un modo diverso o con una sintassi diversa.

3

Sfortunatamente sebbene SQL dovrebbe essere uno standard, ogni implementazione di database è diversa e ha le sue peculiarità, quindi devi organizzare la tua Query per farlo funzionare su SQLite.