Andreas: MySQL Spaltendefinitionen

Hallo!
nachdem ich mehr oder weniger durch Zufall mein Problem weiter unten http://forum.de.selfhtml.org/?m=73833&t=13344 mit LOAD DATA INFILE gelöst hatte (einfach mit mysqlimport!) habe ich jetzt ein Problem beim Import selbst. UInd zwar mit den Spaltendefinitionen.
Ich habe von der zu importierenden Tabelle eine genau spezifikation, d.h. genaue Feldlängen und Datentypen.
Ein typisches Feld wäre z.B. BLZ oder PLZ. Die sind überalll vorhanden, und haben immer gleich viele Zeichen. Also habe ich erst ein Feld mit 8 bzw. 5 Zeichen erstellt, zuerst als INT, aber das war wohl falsch, da hier z.B. bei PLZ die erste 0 mancher Ostdeutscher Mitbürger unterschlagen wurde. seltsamerweise dasselbe mit VARCHAR(warum geht nicht CHAR, das hatte ich probiert, hat aber automatisch auf VARCHAR umgestellt?!?!) Mit welchem Typ kann ich es erreichen, das die 0 stehen bleibt? Ich habe das Gefühl, die geht evtl beim Import verloren, aber da werden noch nichtmal Warnungen angezeigt. Wo könnte wohl der Fehler liegen?
Grüße
Andreas

  1. ... Kommando zurück!!! Sorry für den etwas wirren Text, ich hatte das so gar nicht verstanden - Problem ist nicht mysql, sondern Excel, womit ich die csv Datei exportiert habe. Leider hat Excel diese Super-Funktion, vorstehende Nullen zu löschen - unwiederruflich, ohne das man was machen kann - oder doch? weiß zufällig jemand, wo ich diese nervtötende Funktion ausschalten kann? Ich benutze Excel fast nur für sowas, um Daten "umzufomatieren" und da habe ich das Problem öfter!
    Eine Sache muß mir aber trotzdem mal jemand erklären, wenn ich in PHPmyAdmin sage, ein Feld soll CHAR seiin mit 8 Zeichen, warum um himmelswillen wird dann daraus ein VARCHAR Feld mit 8 Zeichen?
    Grüße
    Andreas

    1. Halihallo

      Eine Sache muß mir aber trotzdem mal jemand erklären, wenn ich in PHPmyAdmin sage, ein Feld soll CHAR seiin mit 8 Zeichen, warum um himmelswillen wird dann daraus ein VARCHAR Feld mit 8 Zeichen?

      Auf diese Frage habe ich eine Antwort (bin leider kein Excel-Spez. und kann auf jene nicht antworten):

      Wenn mindestens eine Spalte in der Tabelle eine dynamische Länge hat, wird aus jedem CHAR ein VARCHAR. Da bei dynamischen Feldern die ganze Performance am **** ist (weil die RDBMS die Daten dann irgendwo sonst in der Datei einlesen muss, aber nicht im aktuellen Datensatz [da dieser nur die Position der Daten enthält]), wird eben der Speicherbedarf optimiert und alles in VARCHAR geändert (oftmals weniger Speicherverbrauch).

      Viele Grüsse

      Philipp

      1. HI!
        ich weiß definitiv die Länger ALLER Felder. Hatte nur die Befüchtung, das bei anderen Feldern wie Ort, dann teilweise die Fehlenden ZZeichnen mit Leerzeichen oder wie auch immer ausgefüllt werden. Dann müßte ich hinterher immer die Ergebnisse aus der DB bearbeiten, könnte so auch nicht direkt suchen mit SELECT!!
        Wie ist das wenn ich jetzt alle mit CHAR angebe, aber nicht immer alle Felder 100% ausgefüllt sind?
        Grüße
        Andreas

        1. Halihallo

          ich weiß definitiv die Länger ALLER Felder. Hatte nur die Befüchtung, das bei anderen Feldern wie Ort, dann teilweise die Fehlenden ZZeichnen mit Leerzeichen oder wie auch immer ausgefüllt werden. Dann müßte ich hinterher immer die Ergebnisse aus der DB bearbeiten, könnte so auch nicht direkt suchen mit SELECT!!

          Doch, du könntest mit SELECT auch danach suchen. Dann ging's etwa so:

          SELECT col FROM tbl WHERE City LIKE "<choice>%"

          Damit liesse sich sogar einen Index über City legen, der hiermit auch verwendet werden würde (bei "%...%" LIKE Abfragen nimmer) => Performance... Aber das nur nebenbei.

          Wie ist das wenn ich jetzt alle mit CHAR angebe, aber nicht immer alle Felder 100% ausgefüllt sind?

          Kein Problem, es kommen trotzdem nur die Zeichen, welche vom Kunden/dir eingegeben wurden. Der Unterschied zwischen CHAR und VARCHAR ist lediglich der, dass beim letzteren die Daten nicht im eigentlichen Record, sondern wo anders gespeichert werden und derjenige Platz im Record ist dann der Pointer auf die Nutzdaten. Was aber beide gemein haben, ist ein Byte bzw. mehrere bei grossen Datenbeständen (TEXT, BLOB u.d.g), um die aktuelle Anzahl Bytes zu speichern, die auch wirklich gespeichert wurden. CHAR hat zwar eine fixe mögliche Anzahl an Bytes, welche gespeichert werden können, aber es dürfen selbstverständlich auch weniger sein; was du von der Datenbank aber gelifert bekommst, sind auch nur die Daten, welche du eingegeben hast. Es gibt auch keine Füllzeichen, die restlichen Bytes werden einfach ignoriert.

          Viele Grüsse

          Philipp

          1. Hi!
            Sehr schön, dann probiere ich das mal, Danke Schön!
            Grüße
            Andreas

            1. Halihallo

              Bitteschön :-)
              Und viel Spass dabei...

              Viele Grüsse

              Philipp

              1. Moin!

                Bitteschön :-)
                Und viel Spass dabei...

                den habe ich gerade :-)
                Aber eine Frage ist da doch aufgekommen, und zwar habe ich ja geschrieben das die Ursprünglichen Daten durch Feste Breite getrennt sind, d.h. immer Durch Leerzeichen aufgefüllt. Wenn ich jetzt einfach ";" dazwischensetze, bleiben dei Leerzeichen ja theoretich erstmal erhalten. Da hatte ich überlegt, ob ich jeden einzelnen Wert mit trim() behandeln soll, aber ich habe es erstzmal so verucht, und seltsamerweise sind die ganzen Leerzeichen nicht mehr da(nicht mehr im html-Quelltext zumindest). Was heißt das jetzt? Macht das Mysql etwa von sich aus?
                Grüße
                Andreas

                1. Halihallo

                  Aber eine Frage ist da doch aufgekommen, und zwar habe ich ja geschrieben das die Ursprünglichen Daten durch Feste Breite getrennt sind, d.h. immer Durch Leerzeichen aufgefüllt. Wenn ich jetzt einfach ";" dazwischensetze, bleiben dei Leerzeichen ja theoretich erstmal erhalten. Da hatte ich überlegt, ob ich jeden einzelnen Wert mit trim() behandeln soll, aber ich habe es erstzmal so verucht, und seltsamerweise sind die ganzen Leerzeichen nicht mehr da(nicht mehr im html-Quelltext zumindest). Was heißt das jetzt? Macht das Mysql etwa von sich aus?

                  Eigentlich nicht, wie liest du die Daten denn ein? - Befehl?
                  Vielleicht macht dies mysql beim Import von CVS wirklich automatisch, aber wissen tue ich's nicht.

                  Viele Grüsse

                  Philipp

                  1. Halihallo nochmals

                    Eigentlich nicht, wie liest du die Daten denn ein? - Befehl?

                    OK. Sollte etwas aufmerksamer lesen... Diese Fragen erübrigen sich.

                    Vielleicht macht dies mysql beim Import von CVS wirklich automatisch, aber wissen tue ich's nicht.

                    Was anderes kann ich mir einfach nicht vorstellen.

                    Viele Grüsse

                    Philipp

                    1. Hi!

                      Eigentlich nicht, wie liest du die Daten denn ein? - Befehl?

                      OK. Sollte etwas aufmerksamer lesen... Diese Fragen erübrigen sich.

                      also über mysqlimport(http://www.mysql.com/doc/m/y/mysqlimport.html)

                      Vielleicht macht dies mysql beim Import von CVS wirklich automatisch, aber wissen tue ich's nicht.

                      Was anderes kann ich mir einfach nicht vorstellen.

                      In der txt-Datei die ich importiere sind definitiv alle Zeichen noch enthalten. Ich kann aber nur sagen, wie es mit der Ausgabe in PHPmyadmin ist, was anderes habe ich noch nicht getestet. Wenn ich mir hier halt die Werte in den Spalten angucke(im htmlcode) sind da keine Leerzeichen drin. Oder macht da evtl PHPmyadmin "unfug"?  Aber das kann eigenbtlich auch nicht sein, denn ich kann auch z.B. eine Abfrage machen SELECT * FROM blz WHERE Ort='Berlin', das haut ja nur hin, wenn das ganze Feld 'Berlin' enthält, und nicht 'Berlin          ', oder?

                      Eine andere Frage zu obiger Funktion, wie ich das verstehe kann man den Tabellennamen in den importiert wird nur über den Dateinamen der Importdatei beeinflussen, oder? Das ist aber blöd, oder geht das vielleicht doch anders?

                      Viele Grüße
                      ANDREAS

                      1. Halihallo

                        Eigentlich nicht, wie liest du die Daten denn ein? - Befehl?

                        OK. Sollte etwas aufmerksamer lesen... Diese Fragen erübrigen sich.
                        also über mysqlimport(http://www.mysql.com/doc/m/y/mysqlimport.html)

                        eben. Das hattest du ja schon geschrieben, zwar in einem anderen Thread. Ich hatte eben den Durchblick nimmer :-)

                        Vielleicht macht dies mysql beim Import von CVS wirklich automatisch, aber wissen tue ich's nicht.

                        Was anderes kann ich mir einfach nicht vorstellen.
                        In der txt-Datei die ich importiere sind definitiv alle Zeichen noch enthalten. Ich kann aber nur sagen, wie es mit der Ausgabe in PHPmyadmin ist, was anderes habe ich noch nicht getestet. Wenn ich mir hier halt die Werte in den Spalten angucke(im htmlcode) sind da keine Leerzeichen drin. Oder macht da evtl PHPmyadmin "unfug"?

                        Ich habe zwar den Source nicht angeschaut, aber ich glaube kaum.

                        Aber das kann eigenbtlich auch nicht sein, denn ich kann auch z.B. eine Abfrage machen SELECT * FROM blz WHERE Ort='Berlin', das haut ja nur hin, wenn das ganze Feld 'Berlin' enthält, und nicht 'Berlin          ', oder?

                        das stimmt. Sonst müsstest du SELECT * FROM blz WHERE Ort LIKE 'Berlin%' nehmen.

                        Eine andere Frage zu obiger Funktion, wie ich das verstehe kann man den Tabellennamen in den importiert wird nur über den Dateinamen der Importdatei beeinflussen, oder? Das ist aber blöd, oder geht das vielleicht doch anders?

                        Vielleicht LOAD DATA INFILE '...' INTO TABLE 'tbl_name';

                        Viele Grüsse

                        Philipp

                        1. Hi Philipp!

                          Hast Recht, das ist jetzt alles etwas auseinander gelaufen. naja, ich neige irgendwo dazu wenn ich Fragen zu einem neuen Themenbereich habe einen neuen Thread zu eröffnen, nur das dumme ist dann ja immer, das mir die Zusammenhänge klar sind, und euch nicht zwangsläufig. Ich werde mich bemühen das in Zukunft zu lassen :-)

                          also über mysqlimport(http://www.mysql.com/doc/m/y/mysqlimport.html)

                          eben. Das hattest du ja schon geschrieben, zwar in einem anderen Thread. Ich hatte eben den Durchblick nimmer :-)

                          Was anderes kann ich mir einfach nicht vorstellen.
                          In der txt-Datei die ich importiere sind definitiv alle Zeichen noch enthalten. Ich kann aber nur sagen, wie es mit der Ausgabe in PHPmyadmin ist, was anderes habe ich noch nicht getestet. Wenn ich mir hier halt die Werte in den Spalten angucke(im htmlcode) sind da keine Leerzeichen drin. Oder macht da evtl PHPmyadmin "unfug"?

                          Ich habe zwar den Source nicht angeschaut, aber ich glaube kaum.

                          Aber das kann eigenbtlich auch nicht sein, denn ich kann auch z.B. eine Abfrage machen SELECT * FROM blz WHERE Ort='Berlin', das haut ja nur hin, wenn das ganze Feld 'Berlin' enthält, und nicht 'Berlin          ', oder?

                          das stimmt. Sonst müsstest du SELECT * FROM blz WHERE Ort LIKE 'Berlin%' nehmen.

                          Eine andere Frage zu obiger Funktion, wie ich das verstehe kann man den Tabellennamen in den importiert wird nur über den Dateinamen der Importdatei beeinflussen, oder? Das ist aber blöd, oder geht das vielleicht doch anders?

                          Vielleicht LOAD DATA INFILE '...' INTO TABLE 'tbl_name';

                          Ich mache das ja nicht mir LOAD DATA INFILE !!! Gar keine DB-Query, sondern über einen System() Aufruf von mysqlimport. Naja, ist auch nicht so wichtig, hätte mich nur mal interessiert falls das jemand gewußt hätte.   Übrigens habe ich herausbekommen das mein provider LOAD DATA INFILE Deaktiviert hat, daher auch das Verbot aus dem vorherigen Thread, mit mysqlimport gehts ja auch.

                          Viele Grüße
                          Andreas

                          1. Halihallo

                            Hast Recht, das ist jetzt alles etwas auseinander gelaufen. naja, ich neige irgendwo dazu wenn ich Fragen zu einem neuen Themenbereich habe einen neuen Thread zu eröffnen

                            Was ja eigentlich ganz OK ist. Aber die Threads die du gestartet hast hängen eben etwas mehr zusammen, so dass eine Threadabgrenzung nicht umbedingt möglich/sinnvoll ist.

                            nur das dumme ist dann ja immer, das mir die Zusammenhänge klar sind, und euch nicht zwangsläufig. Ich werde mich bemühen das in Zukunft zu lassen :-)

                            Eine Abgrenzung kann schon sehr sinnvollsein. Nur muss man eben immer abschätzen, ob ein neuer Thread zu starten "sinnvoll" ist.

                            Vielleicht LOAD DATA INFILE '...' INTO TABLE 'tbl_name';

                            Ich mache das ja nicht mir LOAD DATA INFILE !!! Gar keine DB-Query, sondern über einen System() Aufruf von mysqlimport.

                            Hast recht. Das hast du ja auch schon geschrieben. Nur hat mich der andere Thread (dort kommt LOAD DATA INFILE vor) verwirrt. Entschuldigung!

                            Naja, ist auch nicht so wichtig, hätte mich nur mal interessiert falls das jemand gewußt hätte.   Übrigens habe ich herausbekommen das mein provider LOAD DATA INFILE Deaktiviert hat, daher auch das Verbot aus dem vorherigen Thread, mit mysqlimport gehts ja auch.

                            Oh, das ist bitter :-((
                            Nun, ja, wie man den Tabellennamen mit dem Systemprogramm setzen kann, weiss ich nicht, aber lies mal die Dokumentation zum Programm. Ich bin mir sicher, dass man das mit Parametern festlegen kann.

                            Viele Grüsse

                            Philipp

                            1. Hi!

                              Oh, das ist bitter :-((

                              Naja, absichtlich - aus Sicherheitsgründen, habe schonmal gehört das es ein Sicherheitsrisiko darstellen kann, und es ging ja auch anders!

                              Nun, ja, wie man den Tabellennamen mit dem Systemprogramm setzen kann, weiss ich nicht, aber lies mal die Dokumentation zum Programm. Ich bin mir sicher, dass man das mit Parametern festlegen kann.

                              Du hast mitgekriegt, dass es sich dabei um ein Bestandteil des Mysql-Servers handelt, ja? Ken extra Tool! Genau wie mysqldump, mysql... wird das halt z.B. über system() aufgerufen.
                              Doku ist halt die mysql-Doku, genauer http://www.mysql.com/doc/m/y/mysqlimport.html, da steht das zum einen die tabellennamen aus den Dateinamen ermittelt werden, sonst nix. Außerdem müßte glaube ich auch der Aufruf anders heißen:

                              shell> mysqlimport [options] database textfile1 [textfile2 ...]

                              Sowas wie

                              shell> mysqlimport [options] database table1 [table2] textfile1 [textfile2 ...]

                              naja. Guck ruhig mal rein unmzter dem Link, ist ganz kurz, nur ein ca.  20 Parameter, die da ganz kurz beschreiben sind, sonst nix. Nur ich kenne mich damit noch nicht allzu gut aus, vielleicht habe ich ja was überlesen, ich finde jedenfalls keinen Parameter, mit dem man die Tabellen festlegen kann, kommt wohl daher, das man sowieso für jede Tabelle eine Datei braucht, und so ist es ja am sichersten, das auch nix in die falsche Tabelle kommt...

                              Viele Grüsse

                              Andreas

                              1. Halihallo

                                Nun, ja, wie man den Tabellennamen mit dem Systemprogramm setzen kann, weiss ich nicht, aber lies mal die Dokumentation zum Programm. Ich bin mir sicher, dass man das mit Parametern festlegen kann.
                                Du hast mitgekriegt, dass es sich dabei um ein Bestandteil des Mysql-Servers handelt, ja?

                                Ja. Das war mir bewusst.

                                Ken extra Tool! Genau wie mysqldump, mysql... wird das halt z.B. über system() aufgerufen.

                                Klar.

                                naja. Guck ruhig mal rein unmzter dem Link, ist ganz kurz, nur ein ca.  20 Parameter, die da ganz kurz beschreiben sind, sonst nix. Nur ich kenne mich damit noch nicht allzu gut aus, vielleicht habe ich ja was überlesen, ich finde jedenfalls keinen Parameter, mit dem man die Tabellen festlegen kann, kommt wohl daher, das man sowieso für jede Tabelle eine Datei braucht, und so ist es ja am sichersten, das auch nix in die falsche Tabelle kommt...

                                Hm. Schade. Hätte eigentlich gedacht, dass dies möglich sein sollte. Aber ich kenne leider diese Dienstprogis nicht, da ich alles über SQL regle.

                                Viele Grüsse

                                Philipp

                                1. Hi!

                                  :-)

                                  Naja, ich mach öfter was damit, vor allem um Dumps automatisch zu erzeugen udn auszulesen, das geht nämlich nicht mit SQL!

                                  Grüße
                                  Andreas

                                  1. Halihallo

                                    Naja, ich mach öfter was damit, vor allem um Dumps automatisch zu erzeugen udn auszulesen, das geht nämlich nicht mit SQL!

                                    Nicht ohne Programmieraufwand vielleicht, aber es ist möglich. Zugegeben man braucht schon etwas mehr als ein SQL-query :-)

                                    Viele Grüsse

                                    Philipp

                                    1. Hi!

                                      Nicht ohne Programmieraufwand vielleicht, aber es ist möglich. Zugegeben man braucht schon etwas mehr als ein SQL-query :-)

                                      Und da ich von Natur aus fauul bin schreibe ich da lieber einen kleinen system() Aufruf hin, als mit wer weiß was aus den Fingern zu saugen, außerdem ist das nicht fehleranfällig.

                                      Außerdem habe ich mir ein recht komplexes-Sicherungsscript geschrieben, welches alle wichtigen Daten meiner Datenbanken Speichert(kann sogar die letzten 30 Tage den Datenbestand jedes Tages wiederherstellen), und mir per mail komprimieret und verschlüsselt zuschickt, außerdem täglich ein kpl. DUMP-Schema überspeichert... ist sehr sicher denke ich ;-)

                                      Mit SQl wäre das aber superaufwendig gewesen, so ist es sogar recht übersichtlich!

                                      Grüße
                                      Andreas

                                      Viele Grüsse

                                      Philipp

                                      1. Halihallo

                                        Nicht ohne Programmieraufwand vielleicht, aber es ist möglich. Zugegeben man braucht schon etwas mehr als ein SQL-query :-)

                                        Und da ich von Natur aus fauul bin schreibe ich da lieber einen kleinen system() Aufruf hin, als mit wer weiß was aus den Fingern zu saugen, außerdem ist das nicht fehleranfällig.

                                        Das ist natürlich ein Grund... Aber was ist, wenn gar kein mysql auf deinem Computer installiert wäre??? - OK. Du hast's drauf und dann ist's gut, aber eine "allgemeine" Lösung (wenn es die überhaupt gäbe), ist das bestimmt nicht...

                                        Außerdem habe ich mir ein recht komplexes-Sicherungsscript geschrieben, welches alle wichtigen Daten meiner Datenbanken Speichert(kann sogar die letzten 30 Tage den Datenbestand jedes Tages wiederherstellen), und mir per mail komprimieret und verschlüsselt zuschickt, außerdem täglich ein kpl. DUMP-Schema überspeichert... ist sehr sicher denke ich ;-)

                                        Ja, das ist gute Arbeit. Ich machte es auch so... Zudem werden mir Fehler von der Webapplications auch direkt an mich gesendet :-)
                                        Wir wollen doch nicht, dass der Kunde sich an uns wenden muss. Sondern: Wenn er sich meldet, ist das Problem bereits behoben (das nenne ich Philipp Support :-)).

                                        Mit SQl wäre das aber superaufwendig gewesen, so ist es sogar recht übersichtlich!

                                        Das stimmt. Aber gibt's was schöneres, als ein schönes Perl Programm, welches durch einen cron - Job gestartet wird und meherer Seiten lang ist??? - Beim selberprogrammieren weiss ich wenigstens, was der Computer macht...

                                        Viele Grüsse

                                        Philipp

                                        1. Hallöchen!

                                          Das ist natürlich ein Grund... Aber was ist, wenn gar kein mysql auf deinem Computer installiert wäre??? - OK. Du hast's drauf und dann ist's gut, aber eine "allgemeine" Lösung (wenn es die überhaupt gäbe), ist das bestimmt nicht...

                                          Hä? Wenn ich kein MySQL habe, was bringen mir dan SQL Querys? Ich habe zur Zeit gar kein MySQL auf meinem PC, aber deer Server hat das, und das tolle ist, man kann mit PHP nicht nur direkt die Datenbank mit mysql_query() ansprechen, sondern man kann auch über System-Aufrufe auf auf dem Server installierte Software zugreifen! Du mußt nur wissen, in welchem Serverpfad mysql installiert ist, meist geht es mit /usr/bin/.

                                          system() ist ja auch ein PHP-Funktion!(Gibt garantiert etwas vergleichbares in PERL!)

                                          Ja, das ist gute Arbeit. Ich machte es auch so... Zudem werden mir Fehler von der Webapplications auch direkt an mich gesendet :-)
                                          Wir wollen doch nicht, dass der Kunde sich an uns wenden muss. Sondern: Wenn er sich meldet, ist das Problem bereits behoben (das nenne ich Philipp Support :-)).

                                          sehr lobenswert! halte ich ähnlich!

                                          Mit SQl wäre das aber superaufwendig gewesen, so ist es sogar recht übersichtlich!

                                          Das stimmt. Aber gibt's was schöneres, als ein schönes Perl Programm, welches durch einen cron - Job gestartet wird und meherer Seiten lang ist??? - Beim selberprogrammieren weiss ich wenigstens, was der Computer macht...

                                          sowas per Cron:

                                          Versuch mal folgendes, nur mal so zum Spaß:

                                          speichere den Code unter 'dump.php', hochladen, ausführen und gucken was passiert!
                                          ------------------------------------------------
                                          <?php

                                          // Benutzerdaten eintagen
                                          $user="";
                                          $pass="";
                                          $host="";

                                          $db="";

                                          $file="/serverpfad/zu/deinem/Hauptverzeichnis/dump.sql";

                                          // ggfs mußt Du '/usr/bin' ersetzen, wenn es bei Dir anders lautet, solltest Du von PERL wissen!
                                          system ("/usr/bin/mysqldump -u".$user." -p".$pass." -h".$host." ".$db." >  ".$file, $fp);

                                          if ($fp==0) {
                                               echo "<b>hat gaklappt!</b><br>so einfach - da staunst Du - was?";}
                                          else {
                                               echo "irgendwas scheint noch nicht zu stimmen :-(";}

                                          ?>

                                          -------------------------------------------------------

                                          und wenn Du noch mehr willst ersetze den Systemaufruf, und das ganze wird direkt komprimiert:

                                          system ("/usr/bin/mysqldump -u".$user." -p".$pass." -h".$host." ".$db." | gzip >  ".$file, $fp);

                                          usw... und da gibts noch viel mehr!

                                          Grüße
                                          Andreas

                                          1. Re: Hallöchen :-)

                                            Das ist natürlich ein Grund... Aber was ist, wenn gar kein mysql auf deinem Computer installiert wäre??? - OK. Du hast's drauf und dann ist's gut, aber eine "allgemeine" Lösung (wenn es die überhaupt gäbe), ist das bestimmt nicht...

                                            Hä? Wenn ich kein MySQL habe, was bringen mir dan SQL Querys?

                                            Oem. Ja, ich dachte eben, dass du die Systemprogis von mysql nur lokal (bzw. lokal auf'm Server) ausführen kannst. Mit SQL queries kannst du die DB ja von überall aus anzapfen.

                                            Ich habe zur Zeit gar kein MySQL auf meinem PC, aber deer Server hat das, und das tolle ist, man kann mit PHP nicht nur direkt die Datenbank mit mysql_query() ansprechen, sondern man kann auch über System-Aufrufe auf auf dem Server installierte Software zugreifen! Du mußt nur wissen, in welchem Serverpfad mysql installiert ist, meist geht es mit /usr/bin/.

                                            Das wusste ich eben nicht, dass du das kannst. Deshalb hatte ich bedenken wegen der "portabilität" deiner Scripte. Aber da du ja auch die Systemprogis von überall her starten kannst, ist mein Argument nichtig :-)

                                            system() ist ja auch ein PHP-Funktion!(Gibt garantiert etwas vergleichbares in PERL!)

                                            Ja, heisst sogar genau gleich :-)
                                            system ist schon eine PHP-Funktion, ich hatte auch den mysql-Dumper und all die anderen Systemprogramme (eg. den Zipper) angesprochen...

                                            Mit SQl wäre das aber superaufwendig gewesen, so ist es sogar recht übersichtlich!

                                            Das stimmt. Aber gibt's was schöneres, als ein schönes Perl Programm, welches durch einen cron - Job gestartet wird und meherer Seiten lang ist??? - Beim selberprogrammieren weiss ich wenigstens, was der Computer macht...

                                            Versuch mal folgendes, nur mal so zum Spaß:

                                            [...]

                                            Ja, das ist eine automatisation nach meinem Geschmack (besser gesagt: nicht ganz, da es "Systemabhängig" ist und nur auf Unix-Derivaten funktioniert). Aber die Funktionalität ist lobenswert und ich handhabe das auch ähnlich.

                                            Viele Grüsse vom Bodensee

                                            Philipp

                                            1. Hi!

                                              Ja, das ist eine automatisation nach meinem Geschmack (besser gesagt: nicht ganz, da es "Systemabhängig" ist und nur auf Unix-Derivaten funktioniert). Aber die Funktionalität ist lobenswert und ich handhabe das auch ähnlich.

                                              Warum sollte das unter Windows nicht so gehen? Nur de Pfad ist ein anderer(C:\mysql\bin\mysqldump z.B.)! Oder reicht das schon für Dich aus um inkompatibel zu sein?
                                              Grüße
                                              Andreas

                                              1. Re: Halihallo

                                                Ja, das ist eine automatisation nach meinem Geschmack (besser gesagt: nicht ganz, da es "Systemabhängig" ist und nur auf Unix-Derivaten funktioniert). Aber die Funktionalität ist lobenswert und ich handhabe das auch ähnlich.

                                                Warum sollte das unter Windows nicht so gehen? Nur de Pfad ist ein anderer(C:\mysql\bin\mysqldump z.B.)! Oder reicht das schon für Dich aus um inkompatibel zu sein?

                                                Nein, so schlimm bin ich nun auch wieder nicht :-)
                                                Aber dein Script enthält folgende Zeile:

                                                system ("/usr/bin/mysqldump -u".$user." -p".$pass." -h".$host." ".$db." | gzip >  ".$file, $fp);

                                                gzip mag in jeder Unix-Destr. vorhanden sein, aber bei Win/DOS dürtest du auf einen Fehler stossen.
                                                Aber um etwas allgemeiner zu werden und appropos Fehler:

                                                Wenn man alles in Perl programmiert, kann man ein besseres ErrorHandling machen; wie willst du denn eventuelle Fehler vom dumper oder gzip abfangen? - Meistens wird dies (wie in deinem Script) einfach ignoriert. Andere lesen den Output der Sys.progis durch die Pipe ein und fangen einige (alle ist fast unmöglich) Fehler durch RegExp ab, was ich aber für sehr unschön halte. Wenn man alles mit Perl/php programmiert, kann man sogar eigene/angepasste Fehlermeldungen generieren. Das halte ich für wesentlich "schöneres Programmieren".
                                                Aber am Ende muss das erstens jeder selber entscheiden (alles hat Vor- und Nachteile) und zweitens hängt der Umsetzungtyp stark vom jeweiligen Kontext (sprich Aufgabenstellung) ab.

                                                Viele Grüsse

                                                Philipp

                                                1. Hi!

                                                  gzip mag in jeder Unix-Destr. vorhanden sein, aber bei Win/DOS dürtest du auf einen Fehler stossen.

                                                  Ja, aber ich denke nicht das das in absehbarer Zeit je auf Windows laufen sollte! OK, bei Webseiten sehe ich das genau so, aber solche Sachen, wenn man da sowieso den Pfad usr/bin/ ändern müßte, kann man auch direkt |gzip rausnehmen oder umformulieren. ich sehe da kein Problem

                                                  Aber um etwas allgemeiner zu werden und appropos Fehler:

                                                  Wenn man alles in Perl programmiert, kann man ein besseres ErrorHandling machen; wie willst du denn eventuelle Fehler vom dumper oder gzip abfangen? - Meistens wird dies (wie in deinem Script) einfach ignoriert.

                                                  Also das war natürlich vereinfacht, aber sollte der Systemaufruf irgendwie nicht funktionieren, bekomme ich eine mail! Egal was da schief geht, ich bekomm eine Mail, wo gernau drin steht das die und die Datei nicht erzeugt werden konnte, bzw. das der Dump fehlgeschlagen ist...

                                                  Andere lesen den Output der Sys.progis durch die Pipe ein

                                                  Wie das? Soweit ich weiß kommt bei mysqldump eh kein output raus, wenn man eine Datei angibt. Aber wenn ich > $file weglasse, müßte das eigentlich alles in den Browser geschrieben werden. Aber wie will man das dann überprüfen? Meinst Du das irgendie in eine Variable schreiben? Aber wie?

                                                  und fangen einige (alle ist fast unmöglich) Fehler durch RegExp ab, was ich aber für sehr unschön halte. Wenn man alles mit Perl/php programmiert, kann man sogar eigene/angepasste Fehlermeldungen generieren. Das halte ich für wesentlich "schöneres Programmieren".

                                                  Das stimmt wohl. Ich überlege zur zeit noch, wie ich das einigermaßen automatsich integrieren kann, das mir sämtliche aiftretenden Fehler zugeschoickt werden, ohne das ich das jedesmal extra angeben muß, halt mir irgend ner Funktion, naja.

                                                  Aber am Ende muss das erstens jeder selber entscheiden (alles hat Vor- und Nachteile) und zweitens hängt der Umsetzungtyp stark vom jeweiligen Kontext (sprich Aufgabenstellung) ab.

                                                  Das stimmt auch, Aber da es ja täglich doppelt sichert und die letzten 30 Tage kpl. wiederherstellbar sind, und ich außerdem bei Problemen direkt ne mail bekomme, ist das nur halb so wild denke ich, oder? Aber wie man das mit RegExpr. machen kann(also das einlesen in einer Variable) würde mich doch sehr interesieren!

                                                  Viel Grüße
                                                  Andreas

    2. Leider hat Excel diese Super-Funktion, vorstehende Nullen zu löschen - unwiederruflich, ohne das man was machen kann - oder doch? weiß zufällig jemand, wo ich diese nervtötende Funktion ausschalten kann? Ich benutze Excel fast nur für sowas, um Daten "umzufomatieren" und da habe ich das Problem öfter!

      Naja, wie bei jedem Programm, muß man sich halt auch mit Excel beschäftigen, wenn man es regelmäßig benutzt. Die mitgelieferte Dokumentation, also auch die Online-Hilfe, kann durchaus Lesenswertes enthalten. Ich hatte zwar dieses Problem noch nicht, allerdings habe ich  gerade in ca. 1. Minute eine Lösung gefunden.
      Überlege mal, womit Du in Ecel die Darstellung von Zahlen verändern kannst, dann schlage die entsprechenden Informationen dazu in der Online-Hilfe nach, probierst es aus, und, schwuppdiwupp, fertig ist eine entsprechende CSV-Datei.

      Grüße
        Klaus

      PS.: MIr ist bis jetzt noch kein Computer untergekommen, der bei Tests gebissen oder sonst wie gewalttätig geworden ist. Daher bin ich auch recht ungeniert, wenn es darum geht, neue Sachen einfach auszuprobieren;-)

      PPS.: Sollte sich diese Verhalten irgendwann einmal grundlegend ändern, werde ich mir wohl einen anderen Beruf zulegen.

      1. Hi!

        PS.: MIr ist bis jetzt noch kein Computer untergekommen, der bei Tests gebissen oder sonst wie gewalttätig geworden ist. Daher bin ich auch recht ungeniert, wenn es darum geht, neue Sachen einfach auszuprobieren;-)

        Du kannst mir durchaus glauben das ich das schon länger als 1 minute gesucht habe (benutze XP), das was ich immer finde sind die ganzen automatismen unter Extras/Optionen, die Felddefinitionen kann ich zwar verstellen, aber dann ist es immer schon zu spät, sobald ich diese Datei öffne(nicht importiere, ist xls!!!) fehlt die Null! Wo soll man das denn einstellen können? Die Hilfe hilft auch nur begrenzt, wenn man einfach nicht genau weiß, wonach man suchen soll. Ich wünsche mir doch nur, dass Excel DUMM ist! Also nicht probiert intelligent zu sein, das schafft ein heutiger PC einfach noch nicht, und schon gar nicht so ne Software! Wo kann man das alles abstellen???

        Grüße

        Andreas

        1. Halihallo

          was ist denn mit rechte Maustaste -> Zellen formatieren -> Text??? - Dann wird der Text/Zahl so übernommen, wie man es eingibt, also auch mit 0-en am Anfang.

          Viele Grüsse

          Philipp

          1. Halihallo

            Ups. Hab etwas wenig studiert, bin schon etwas müd...
            Die Felddefinitionen müsste man natürlich vor dem Import ändern, was nicht funktioniert (wahrscheinlich).

            Sorry

            --Philipp

            1. Hi!

              Ups. Hab etwas wenig studiert, bin schon etwas müd...
              Die Felddefinitionen müsste man natürlich vor dem Import ändern, was nicht funktioniert (wahrscheinlich).

              Ich importiere nix, ich öffne eine xls-Datei, die ich so gekriegt habe, von einem anderen PC, wahrscheinlich etwas ältere Excel Version, da will XP mal zeigen was es drauf hat und streicht mal eben die ganzen Nullen am Anfang :-)
              Grüße
              Andreas

          2. Hallo Philipp,

            was ist denn mit rechte Maustaste -> Zellen formatieren -> Text??? - Dann wird der Text/Zahl so übernommen, wie man es eingibt, also auch mit 0-en am Anfang.

            Das Problem von Andreas ist wohl, daß er die Daten nicht eingibt, sondern importiert. Wenn Du z.B. ein Excel-Sheet schön mit Typ Text formatierst, dann als csv speicherst, dann läßt er Dir im csv die Nullen am Anfang. Wenn Du es dann aber wieder öffnest, interpretiert er den String als Zahl, und nachträgliches Formatieren bringt dann auch nichts mehr, weil die Nullen am Anfang nach dem Import schon weg sind (zumindest bei mir mit Office97).
            Ich würde in diesem Fall empfehlen, mit Access zu arbeiten, da gibt es einen Import-Assistenten, mit dem man beim Import aus Textdateien die einzelnen Feldtypen vor dem Import festlegen kann, das funktioniert sehr viel besser als Excel.

            Viele Grüße
            Stephan

            1. Hallo Philipp,

              was ist denn mit rechte Maustaste -> Zellen formatieren -> Text??? - Dann wird der Text/Zahl so übernommen, wie man es eingibt, also auch mit 0-en am Anfang.

              Wie Stephan schon sagt, ich gebe gar nix ein, benutze das nur um die csv zu generieren, da die Vorlage eine xls Datei ist, die Mysql verständllicherweise nicht importieren kann.

              Das Problem von Andreas ist wohl, daß er die Daten nicht eingibt, sondern importiert.

              Nicht ganz, ich importiere nix, ich öffne eine vorhandene xls-DAtei(von der Bundeszentralbank mit BLZ Spezifikationen), beim importieren hätte man ggfs sogar noch einen Einfluß, den hab ich so gar nicht!

              Wenn Du z.B. ein Excel-Sheet schön mit Typ Text formatierst, dann als csv speicherst, dann läßt er Dir im csv die Nullen am Anfang. Wenn Du es dann aber wieder öffnest, interpretiert er den String als Zahl, und nachträgliches Formatieren bringt dann auch nichts mehr, weil die Nullen am Anfang nach dem Import schon weg sind (zumindest bei mir mit Office97).

              Ich würde in diesem Fall empfehlen, mit Access zu arbeiten, da gibt es einen Import-Assistenten, mit dem man beim Import aus Textdateien die einzelnen Feldtypen vor dem Import festlegen kann, das funktioniert sehr viel besser als Excel.

              Ja, Access könnte auch direkt die txt verarbeiten, mit fester Feldbreite, aber mit Excel könnte es so einfach sein...

              Das dumme an der Sache - das ist schlichtweg eine "Denk"-Funktion von Excel, die sich ein paar schlaue Köpfe ausgedacht haben, ist ja bestimmt in 95% der Fällen das beste, aber irgendwie steige ich nicht da durch, wi ich genau diese Funktion auschalten kann. Vieleicht weiß das ja jemand, oder Klaus verräts mir doch noch :-)

              Grüße
              Andreas

              PS: Hab in einiger (unnötiger)  Arbeit ein PHP-Script gestrickt, welches das automatisch macht, naja, aber ich würde s trotzdem gerne wissen, wo man das verstellt!

              1. Hallo,

                Das dumme an der Sache - das ist schlichtweg eine "Denk"-Funktion von Excel, die sich ein paar schlaue Köpfe ausgedacht haben, ist ja bestimmt in 95% der Fällen das beste, aber irgendwie steige ich nicht da durch, wi ich genau diese Funktion auschalten kann. Vieleicht weiß das ja jemand, oder Klaus verräts mir doch noch :-)

                Du suchst an der falschen Stelle.

                Wenn die Datei, die Du bekommst, noch nicht ansprechend formatiert ist, dann kannst Du das nachholen. Du müßtest nur die gewünschte Spalte auswählen, 'Zellen formatieren' im Menü auswählen, im erscheinenden Dialog  'benutzerdefiniert' auswählen und dann beispielsweise '00000' eingeben, damit die Zahlen dieser Spalte 5-stellig sind und führende Nullen besitzt. Diese Information wird dann auch mit abegspeichert, womit die Formatierung auch nach erneutem Öffnen erhalten bleibt. Was wiederum bedeutet, daß, wenn jemand die Datei mit einer anderen Formatierung (z.B. 'Standard') abgespeichert hat, diese auch mit gespeichert ist. Und das eben ist Dein 'Problem'.

                Wenn das in Excel XP nicht mehr funktioniert, dann solltest Du Dir schleunigst 'downgraden'. Aber das denke ich nicht, so dumm ist nicht mal MS.

                Grüße
                  Klaus

                1. Hi KLaus!

                  Du suchst an der falschen Stelle.

                  geht, ich hatte nun mal gehofft, dfas man solche automatismen auschalten kann. Ich glaube nicht das die Bundesbank xls-Dateien offiziell zum Download anbieten, wenn diese bereits Fehlerhaft sind! und das sich jeder der diese Dateien benutzen will ein benutzerdefiniertes Format erstellen muß finde ich doch recht fraglich!

                  Wenn die Datei, die Du bekommst, noch nicht ansprechend formatiert ist, dann kannst Du das nachholen. Du müßtest nur die gewünschte Spalte auswählen, 'Zellen formatieren' im Menü auswählen, im erscheinenden Dialog  'benutzerdefiniert' auswählen und dann beispielsweise '00000' eingeben, damit die Zahlen dieser Spalte 5-stellig sind und führende Nullen besitzt. Diese Information wird dann auch mit abegspeichert, womit die Formatierung auch nach erneutem Öffnen erhalten bleibt. Was wiederum bedeutet, daß, wenn jemand die Datei mit einer anderen Formatierung (z.B. 'Standard') abgespeichert hat, diese auch mit gespeichert ist. Und das eben ist Dein 'Problem'.

                  OK, das wäre ein Lösungsweg(auf den ich auch hätte kommen können :-), naja, inzwischen habe ich mir ein PHP-Script geschrieben, was alles von alleine macht und die Daten direkt in mysql läd.

                  Grüße
                  Andreas

                  1. Also Bei Excel kann man bereits beim Import von CSV-Daten festlegen, dass eine bestimmte Spalte Text enthält. Benenne die Datei vor dem Öfnnen von xyz.csv nach xyz.txt um und dann:

                    Auswahl des Types: [x] Getrennt
                    Import beginnen: (Zeile)
                    Dateiursprung: (ANSI)
                    [weiter]

                    ...

                    Trennzeichen: [x]Semikolon
                    Texterkennungszeichen: "
                    [weiter]

                    ...

                    Die einzelnen Spalten markieren, dann [x] Text auswählen.

                    Und schon geht es...

                    fastix

                    1. Also Bei Excel kann man bereits beim Import von CSV-Daten festlegen, dass eine bestimmte Spalte Text enthält. Benenne die Datei vor dem Öfnnen von xyz.csv nach xyz.txt um und dann:

                      Wie schon mehrfach geschrieben, wenn ich eine csv-Datei hätte bräuchte ich Excel nicht!!!!! Ich habe entweder eine txtDatei mit Spaltendefinition durch feste Breite(z.B. ID immer 5 Zeichen, Name immer 25 Zeichen... und wenn z.B. ein Name 10 Zeichen lang ist, ist der Rest mit Leerzeichen gefüllt!). Das Problem - wie bekomme ich diese Daten in MySQL??? Wien Möglichkeit ist über Access, oder ein eigenes Script, welches eine csv-Datei generiert und in mysql importiert - meine Lösung.

                      Das andere Dateiformat das mit vorliegt xls direkt. Also dachte ich, einfach in Excel öffnen und als csv speichern - aber bis jetz ist es mnir nicht gelungen, die Datei so in Excel zu öffnen, das alle PLZ 5 zeichen haben!

                      Falls es Dich interessiert: ganz unten auf folgender Seite findest Du alle zur Verfügung stehenden Dateien:

                      http://192.109.2.70/internet/bankleit.nsf/ludownloads/Download+Bankleitzahlen?OpenDocument

                      Viele Grüße
                      Andreas