Korrekte database.sql erzeugen: Unterschied zwischen den Versionen

Aus Contao Community Documentation

(Die Seite wurde neu angelegt: „Einige Entwickler werden wahrscheinlich das Problem haben, dass die Modultabellen zwar korrekt erzeugt werden, sich aber trotzdem nach der Installation immer noch…“)
 
K (Beispiel Statement und Hinweise dazu)
Zeile 57: Zeile 57:
 
* der Name des Unique Keys und des normalen Keys muss identisch sein mit dem Feldnamen der in Klammern steht.
 
* der Name des Unique Keys und des normalen Keys muss identisch sein mit dem Feldnamen der in Klammern steht.
 
* ein Key der über mehrere Felder angelegt werden könnte, wird von Contao nicht akzeptiert (funktioniert aber)
 
* ein Key der über mehrere Felder angelegt werden könnte, wird von Contao nicht akzeptiert (funktioniert aber)
 +
* Richtiges Präfix: Contao parst nur Tabellen, die mit dem Präfix "tl_" ausgestattet sind.
  
  

Version vom 9. Juli 2010, 12:51 Uhr

Einige Entwickler werden wahrscheinlich das Problem haben, dass die Modultabellen zwar korrekt erzeugt werden, sich aber trotzdem nach der Installation immer noch in der Sektion "Update Database" wiederfinden. Meist liegt das an den implizierten Defaultwerten die von MySQL automatisch erzeugt werden.

betrifft
TYPOlight Version ab 2.6
Contao Version ab 2.9

Normalfall

Damit die Tabellen nicht mehr in dieser Sektion erscheinen, macht man einfach folgendes nachdem die Tabelle einmal korrekt angelegt worden ist:

  1. SQL Mode überprüfen. (Wird bei den meisten nicht relevant sein) Contao arbeitet unter MySQL nicht im Strictmodus, welcher standardmäßig auch aus ist. Einfach im phpMyAdmin oder auf der Konsole eingeben und kontrollieren, dass der Wert leer ist:
    SHOW VARIABLES LIKE 'sql_mode';
    Wenn nicht leer gibt man folgendes ein:
    SET sql_mode = '';
  2. Nun lässt man sich das create statement zurückgeben:
    SHOW CREATE TABLE tl_MODULE_TABLE_NAME
    tl_MODULE_TABLE_NAME natürlich durch den eigenen Tabellen Namen ersetzen. Dieses Statement ist nun genau so in der database.sql zu verwenden.

Achtung.png Achtung: Es gibt Ausnahmen, siehe nächsten Abschnitt.


Spezialfall

Leider funktioniert das nicht ganz bei Feldern die NULL sein dürfen, Beispiel:

`price` decimal(20,4) NULL ,
`price2` double(255,0) NULL

MySQL gibt nach obigem Beispiel zurück:

`price` decimal(20,4) default NULL,
`price2` double(255,0) default NULL

Beides akzeptiert Contao aber nicht. Dafür die vollständige Variante:

`price` decimal(20,4) NULL default NULL,
`price2` double(255,0) NULL default NULL

Hier ist also etwas Nacharbeit nötig.
Andererseits auch einfach zu merken, immer den vollständigen Syntax nehmen:

    NAME  TYP[(WIDTH, PRECISION, SCALE)]  [NOT] NULL  default VALUE


Beispiel Statement und Hinweise dazu

Hier mal ein SQL CREATE Statement mit einigen meist gebrauchten Kombinationen:

    CREATE TABLE `tl_sqltest` (
      `id` int(10) unsigned NOT NULL auto_increment,
      `pid` int(10) unsigned NOT NULL default '0',
      `sorting` int(10) unsigned NOT NULL default '0',
      `tstamp` int(10) unsigned NOT NULL default '0',
      `decimal_demo1` decimal(20,4) NOT NULL default '100.0000',
      `decimal_demo2` decimal(20,0) NOT NULL default '100',
      `varchar_demo1` varchar(32) NOT NULL default 'demo',
      `varchar_demo2` varchar(64) NOT NULL default '',
      `char_demo1` char(1) NOT NULL default 'A',
      `char_demo2` char(1) NOT NULL default '',
      `text_demo1` text NOT NULL,
      `int_null_demo` int(10) NULL default NULL,
      `decimal_null_demo` decimal(20,4) NULL default NULL,
      `varchar_null_demo` varchar(32) NULL default NULL,
      `char_null_demo` char(1) NULL default NULL,
      `text_null_demo` text NULL,
      `timestamp_demo` timestamp NULL default NULL,
      `date_demo` date NOT NULL default '1999-01-01'
      PRIMARY KEY  (`id`),
      UNIQUE KEY `varchar_demo1` (`varchar_demo1`),
      KEY `pid` (`pid`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
  • bei PRIMARY KEY müssen 2 Leerzeichen folgen bevor die runde Klammer folgt
  • blob/text Felder (auch die Untertypen tinytext,...) dürfen laut MySQL keinen Default Wert haben, daher ist es hier richtig diesen wegzulassen.
  • der Name des Unique Keys und des normalen Keys muss identisch sein mit dem Feldnamen der in Klammern steht.
  • ein Key der über mehrere Felder angelegt werden könnte, wird von Contao nicht akzeptiert (funktioniert aber)
  • Richtiges Präfix: Contao parst nur Tabellen, die mit dem Präfix "tl_" ausgestattet sind.



--BugBuster 13:42, 9. Jul. 2010 (CEST)

Ansichten
Meine Werkzeuge

Contao Community Documentation

Ich brauch nen Bier, es ist zwar noch nicht nach 4, aber es ist nach Oli.

Yanick Witschi
Navigation
Verstehen
Verwenden
Entwickeln
Verschiedenes
Werkzeuge