MetaModels Workshop in Berlin
Ergebnis 1 bis 16 von 16

Thema: Tipps zur SQL Dump Syntax in Contao

  1. #1
    Haupt-Administratorin der Contao-Foren
    Buchautorin 'Contao für Redakteure'
    Avatar von Nina
    Registriert seit
    04.06.2009.
    Ort
    Mecklenburg-Vorpommern
    Beiträge
    4.727
    Partner-ID
    11474
    User beschenken
    Wunschliste

    Standard Tipps zur SQL Dump Syntax in Contao

    Das Installscript erwartet eine ganz korrekte database.sql beim Einlesen von Modulen. Hier können wir Tipps sammeln die etwaige Fehler beim Einlesen vermeiden:

    Richtiges Präfix
    Contao parst nur Tabellen die mit dem Präfix "tl_" ausgestattet sind.

    Allgemeines zur Syntax:
    Das Vergleichstool ist darauf ausgelegt, mit SQL Dumps wie sie z.B. mit phpMyAdmin erzeugt werden zu arbeiten. Versuche daher dein Dump möglichst nach dem gleichen Schema zu erstellen.

    PRIMARY ID:
    Contao erwartet in der database.sql 2 Leerzeichen zwischen PRIMARY KEY und (`id`). Vergisst man das, versucht TL im Install Tool immer den Primary Key zu droppen.

  2. #2
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.011
    User beschenken
    Wunschliste

    Standard

    So ist meine Vorgehensweise:
    1. SQL Mode überprüfen. (Wird bei den meisten nicht relevant sein) Typolight arbeitet unter MySQL nicht im Strictmodus, welcher Standardmäßig auch aus ist. Einfach im phpMyAdmin oder auf der Konsole eingeben und kontrollieren das der Wert leer ist:
    Code:
    SHOW VARIABLES LIKE 'sql_mode';
    Wenn nicht leer folgendes eingeben:
    Code:
    SET sql_mode = '';
    2. Nun lassen wir uns das create statement zurückgeben:
    Code:
    SHOW CREATE TABLE tl_MODULE_TABLE_NAME
    MODULE_TABLE_NAME müsst ihr natürlich durch den Tabellen Namen ersetzen.

    Leider funktioniert das nicht ganz bei Feldern die NULL sein dürfen.
    Andererseits einfach merken, immer den vollständigen Syntax nehmen:
    Code:
    NAME  TYP[(WIDTH, PRECISION, SCALE)]  [NOT] NULL  default VALUE
    Hier mal ein SQL CREATE Statement mit einigen meist gebrauchten Kombinationen:

    Code:
    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,
      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 (sagte Nina schon)
    • 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 TL nicht akzeptiert (funktioniert aber)
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  3. #3
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.011
    User beschenken
    Wunschliste

    Standard

    Im meinem Modul Visitors trat öfters das Problem mit dem Feldtyp "timestamp" auf, es gibt wohl einige MySQL Versionen die bei "NOT NULL" Angaben jeweils anders damit umgehen und dadurch TL zur Fehlermeldung bringt.
    Mit dieser, wenn auch eine "NULL" Variante, gibt es scheinbar weniger Konflikte:
    Code:
    `visitors_tstamp` timestamp NULL default NULL
    Ich brauchte diesen Feldtyp, da ich mittels MySQL mit der Datum / Uhrzeit rechnen wollte.
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  4. #4
    Haupt-Administratorin der Contao-Foren
    Buchautorin 'Contao für Redakteure'
    Avatar von Nina
    Registriert seit
    04.06.2009.
    Ort
    Mecklenburg-Vorpommern
    Beiträge
    4.727
    Partner-ID
    11474
    User beschenken
    Wunschliste

    Standard

    Glen hat hier netterweise nochmal ein paar wichtige Infos zur database.sql hinterlegt.

  5. #5
    Contao-Nutzer Avatar von hanuman
    Registriert seit
    31.07.2009.
    Ort
    Köln
    Beiträge
    43

    Daumen hoch Juhu

    Zitat Zitat von BugBuster Beitrag anzeigen
    [*]bei PRIMARY KEY müssen 2 Leerzeichen folgen bevor die runde Klammer folgt (sagte Nina schon)
    ... vielen Dank euch beiden für diese Informationen.
    Ich habs übers Forum kommend auf Deiner Webseite zuerst gelesen.

    Zwei Probleme traten bei mir auf:

    Das SQL-Dump, das Sequel Pro (Mac) erzeugt hat, hatte zwei 'Fehler'.

    • DEFAULT (Großbuchstaben) statt default (Kleinbuchstaben)
    • nur 1 Leerzeichen nach PRIMARY KEY statt 2 Leerzeichen


    Gut zu wissen und schön, dass das Typolight Install Tool nun nicht mehr die Datenbank updaten möchte.
    Ist schon beeindruckend, wie 'leicht' es ist Typolight zu erweitern.
    Naja okay nicht leicht, da es gerade zum Anfang ziemlich komplex und kompliziert ist (scheint).
    Aber das kleine Stück 'Spitze des Eisberges' gefällt mir schonmal.

    Gruß
    Richard

  6. #6
    Contao-Nutzer
    Registriert seit
    24.11.2009.
    Ort
    Fläsch
    Beiträge
    248

    Standard SQL Syntax für database.sql CREATE TABLE

    Also hier noch einmal alles an einem Stück:

    1. Tabelle in Datenbank anlegen mit einem Tool (z.B. phpmyadmin)
    2. Wie von BugBuster beschrieben das CREATE Statement der Tabelle generieren lassen:
    Code:
    SHOW CREATE TABLE tl_MODULE_TABLE_NAME
    3. Statement wie folgt anpassen:
    3.1 Wie von Nina und Bugbuster gesagt die 2 Leerzeichen zwischen PRIMARY KEY und der folgenden ( sicherstellen.
    3.2 Alle DEFAULT durch default und alle AUTO_INCREMENTdurch auto_increment ersetzen.

    Wenn man 3.2 weglässt will Typolight die betreffende Spalte mit einem CHANGE Befehl anpassen. Das sähe z.B. so aus:
    Code:
    ALTER TABLE `tl_employees` CHANGE `avatare` `avatare` varchar(64) NOT NULL DEFAULT '';

  7. #7
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.011
    User beschenken
    Wunschliste

    Standard database.sql - Generator

    Man kann natürlich auch die Erweiterung database.sql Generator dazu verwenden.
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  8. #8
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.611
    User beschenken
    Wunschliste

    Standard

    Hallo Glen,

    Frage zum Generator. Da kann ich mir doch direkt die database.sql Dateien aus dem Core ansehen, oder? Wäre schön, wenn ich mir damit auch eine Tabelle zusammenstellen könnte. Also die Feldtypen auswählen die ich benötige und dann die Syntax generieren.

    Noch ne Frage zum UNIQUE KEY. Ich weiß da jetzt nicht so genau, was MySQL da intern macht, aber ich denke, dass ich damit doch angebe, dass der Wert in der Spalte eindeutig sein muss, also nicht zweimal auftauchen darf. Jetzt brauche ich eine Tabelle mit dieser Anweisung:
    Code:
    UNIQUE KEY (`spalte_1`, `spalte_2`)
    das geht aber nicht. Kann ich statt dessen dieses hier nehmen?
    Code:
      UNIQUE KEY `spalte_1` (`spalte_1`),
      UNIQUE KEY `spalte_2` (`spalte_2`)
    Oder hat das eine ganz andere Auswirkung?

    Gruß Andreas
    Geändert von Andreas (23.05.2011 um 13:43 Uhr)
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  9. #9
    Maintainer Avatar von xtra
    Registriert seit
    02.07.2009.
    Ort
    Tuebingen
    Beiträge
    2.007
    User beschenken
    Wunschliste

    Standard

    Nein, das geht bislang noch nicht.

    Das Install tool wird den mehrspaltigen Key zwar anlegen, aber anschliessend nicht mehr erkennen. An dem Problem Mehrspaltige Indexe arbeite ich aktuell (wird es hoffentlich in 2.10 schaffen).

    Deine Alternativloesung wyrde zwei eindeutige Keys anlegen, von denen jeder eine spalte beinhaltet.
    Also nicht das was du willst.
    Bedenke stets: Wenn Du ungenaue oder unzureichende Angaben machst, so koennte dies die Bearbeitung deiner Frage endlos verzoegern (oder sogar dazu fyhren, dass ich zu viel nachdenken muss und die Antwort vergesse!). Kein Support per PN.

  10. #10
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.011
    User beschenken
    Wunschliste

    Standard

    Mein Tool wird dann zeitnah das auch generieren können, dazu habe ich mir damals schon eine Erinnerung als Ticket angelegt.

    Zur Generierung der eigentlichen Tabelle gibt es doch genug Tools, phpMyAdmin beispielsweise.
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  11. #11
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.611
    User beschenken
    Wunschliste

    Standard

    Ich danke euch beiden.

    @BugBuster: Ich dachte, das wäre nett, wenn man durch den Generator direkt den passenden Code für Contao bekäme. Also man hätte so die üblichen Felder von Contao zur Auswahl, wählt die passenden Felder aus und lässt den Code generieren. Klar, geht auch anders.

    Gruß Andreas
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  12. #12
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.011
    User beschenken
    Wunschliste

    Standard

    Da hilft dir vielleicht auch das weiter als Hinweis.
    http://de.contaowiki.org/Korrekte_database.sql_erzeugen
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  13. #13
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.611
    User beschenken
    Wunschliste

    Standard

    Danke, aber ich habe keine Probleme damit und steht ja auch schon alles auf deiner Homepage. Ich dachte eben nur als Feature für deine Erweiterung, denn bislang muss man ja die Tabellen erst angelegt haben um mit deinem Generator den Code zu sehen und ich dachte, wäre vielleicht schön, wenn man den Code vorher schon bekommt.
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  14. #14
    Contao-Urgestein Avatar von Thomas
    Registriert seit
    16.08.2009.
    Ort
    Visselhövede
    Beiträge
    1.947
    User beschenken
    Wunschliste

    Standard

    Moin, moin!

    Ich versuche gerade per eigenem Modul, die tl_member Tabelle um eine Spalte zu erweitern!
    Hierzu habe ich folgendes versucht:
    Code:
    CREATE TABLE `tl_member` (
      `cdt_active` TINYINT NOT NULL default '0'
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
    Die Spalte wird korrekt angelegt und/oder geändert.

    Leider möchte das Installtool immer wieder diese Spalte aktualisieren, obwohl ich mich an die Direktiven von hier gehalten habe.
    Code:
    ALTER TABLE `tl_member` CHANGE `cdt_active` `cdt_active` tinyint NOT NULL default '0';
    Ich verwende absichtlich tinyint, da ich nur einstellige Werte (0 & 1) speichern möchte.

    Ich habe es in den unterschiedlichen Versionen versucht, NOT NULL groß default klein usw., keine Änderungen.
    Weiß da Jemand einen Rat?
    Gruß Thomas
    "Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du." Mahatma Gandhi

  15. #15
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.011
    User beschenken
    Wunschliste

    Standard

    Hab das mal in MySQL direkt so eingegeben, und mir dann wieder das Statement ausgeben lassen, dabei kam diese Zeile zurück:
    Code:
     `cdt_active` tinyint(4) NOT NULL DEFAULT '0'
    MySQl legt also scheinbar tinyint mit der Angabe (4) an (vollständiger Syntax + 4 als default), das will dann Contao auch so, wobei in Contao für ein einzelnes Zeichen immer char(1) verwendet wird.
    Geändert von BugBuster (26.01.2012 um 09:52 Uhr)
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  16. #16
    Contao-Urgestein Avatar von Thomas
    Registriert seit
    16.08.2009.
    Ort
    Visselhövede
    Beiträge
    1.947
    User beschenken
    Wunschliste

    Standard

    Danke, BugBuster!

    Das ist dennoch interessant, da hier ein Zahlwert gespeichert werden soll und tinyint ist ja eigtl. genau dafür gedacht.
    Letztendlich ist das egal, da es eh nur für ein JA oder NEIN genutzt werden soll. ich habe jetzt:
    Code:
    CREATE TABLE `tl_member` (
      `cdt_active` char(1) NOT NULL default '0'
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
    genutzt und das funktioniert bestens.

    Danke nochmal.
    Gruß Thomas
    "Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du." Mahatma Gandhi

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Ähnliche Themen

  1. [cm_membergooglemaps] Aktuelles, Probleme, Tipps
    Von ChrMue im Forum Sonstige Erweiterungen
    Antworten: 193
    Letzter Beitrag: 10.03.2011, 23:48
  2. Eure Ideen und Tipps für mein Projekt
    Von maximum im Forum Was kann Contao?
    Antworten: 4
    Letzter Beitrag: 05.08.2010, 11:49
  3. typolight-forge als Dump für "halbfertige" Extensions?
    Von Psi im Forum Entwickler-Fragen
    Antworten: 6
    Letzter Beitrag: 17.05.2010, 07:44
  4. Neuer PC - Eure Tipps, Idde, Vorschläge
    Von felixpfeiffer im Forum Off Topic
    Antworten: 20
    Letzter Beitrag: 28.11.2009, 06:28
  5. Tipps für 2 Webseitenbetrieb
    Von janthemanson im Forum Was kann Contao?
    Antworten: 0
    Letzter Beitrag: 12.07.2009, 21:25

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •