1. Liebe Forumsgemeinde,

    aufgrund der Bestimmungen, die sich aus der DSGVO ergeben, müssten umfangreiche Anpassungen am Forum vorgenommen werden, die sich für uns nicht wirtschaftlich abbilden lassen. Daher haben wir uns entschlossen, das Forum in seiner aktuellen Form zu archivieren und online bereit zu stellen, jedoch keine Neuanmeldungen oder neuen Kommentare mehr zuzulassen. So ist sichergestellt, dass das gesammelte Wissen nicht verloren geht, und wir die Seite dennoch DSGVO-konform zur Verfügung stellen können.
    Dies wird in den nächsten Tagen umgesetzt.

    Ich danke allen, die sich in den letzten Jahren für Hilfesuchende und auch für das Forum selbst engagiert haben. Ich bin weiterhin für euch erreichbar unter tti(bei)pcwelt.de.
    Dismiss Notice

Mysql: deutsche Datumsformat

Discussion in 'Programmieren' started by nklaer, May 27, 2008.

Thread Status:
Not open for further replies.
  1. nklaer

    nklaer Byte

    Hallo,

    wie kann ich in Mysql per Optionseinstellungen das deutsche DAtumsformat anzeigen lassen?
    (wie das mit SELECT ... geht weiss ich!)

    möchte per Servereinstellungen das Datum in der Form tt.mm.jjjj
    anzeigen, wenn ein SELECT-Befehl abgesetzt wird

    habe in my.cnf folgende Einstellungen bereits eingetragen (ohne Erfolg):
    ...
    [client]
    language = german
    default-character-set = latin1_de
    ...
    [mysqld]
    default-time-zone = "Europe/Berlin"
    ...
    [mysql]
    language = german
    default-character-set = latin1_de
    ...


    wo muss ich ggf. noch Einstellungen vornehmen, was ist zu beachten?

    Danke für Eure Hilfe
    Norbert
     
  2. AS_X

    AS_X Halbes Megabyte

    Das Problem ist, dass Datetime/Timestamp eine Datenstruktur ist. Wie diese Datenstruktur bei Ausgabe als String formatiert wird, ist Sache des Programmierers.
    Vielleicht gibst du uns ein paar Details, was du machst (Skript?)
     
  3. nklaer

    nklaer Byte

    schreibe eine .NET-Anwendung,
    in der per DbCommand-Object auf die
    Datenbank zugegriffen werden soll

    die Anwendung soll aber unabhängig von
    einer bestimmten Datenbank sein, d.h.
    die Datenbankanweisungen sollen möglichst
    universell (Mysql, Firebird, Access, usw.)
    angewendet werden ...
    daher der Ansatz die Länderspezifischen Einstellungen
    in der Datenbank (Server) selbst und nicht per
    Script vorzunehmen (müsste ja sonst für
    jede Datenbank individuelle Klassenbibliotheken
    schreiben (würde ich gerne vermeiden)

    gruss
    Norbert
     
  4. AS_X

    AS_X Halbes Megabyte

    Du bekommst doch, wenn ich mich recht entsinne, einen DateTime-Wert aus der Datenbank. Diesen kannst du dann über die Memberfunktion Format individuell formatieren. Format berücksichtigt, wenn man die allgemeinen Formatbezeichner nimmt, auch das im System eingestellte Datumsformat.
     
  5. nklaer

    nklaer Byte

    also, noch was konkreter:

    Mysql speichert das Datum im Format YYYY-MM-DD ab

    wenn ich jetzt mit DbCommand und DbDataAdapter und einem SELECT-Befehl die Daten aus der Datenbanktabelle in ein DataTable-Objekt einlesen möchte dann gibt's ein Exception, weil .NET das Datumsformat nicht umsetzen kann

    klar, ich kann mittels entsprechender DateFormat()-Funktion mir das Datum im entsprechenden Format per SELECT-Befehl ausgeben lassen, doch würde die bedeuten, das die SQL-String für jede Datenbank spezifisch vorzunehmen wären

    mein Ansatz ist, die Länderspezifischen Einstellungen (Datum-, Währung-, Zahlenformat) direkt in der Datenbank vorzunehmen, so dass die SQL-Sequenzen in der Anwendung selbst für alle Datenbanken (Mysql, Access, Firebird, etc.) gleichermassen angewendet werden können
     
  6. AS_X

    AS_X Halbes Megabyte

    Was ist denn der Datentyp des Datums in der Datenbank? String oder Timestamp? Arbeitest du mit einer typisierten DataTable?

    Wenn Timestamps gespeichert werden, hast du m.E. keine Möglichkeit, auf das Format des gespeicherten Wertes einzuwirken, da es schlichtweg nicht abgespeichert wird. Du hast da im Prinzip eine ziemlich große Ganzzahl dahinter vorliegen (oder ggf. eine Struktur, je nach Implementierung), die als Sekunden nach dem 1.1.1970 interpretiert werden muss und bei Zugriff immer in Stunden/Minuten/Tag/Monat/Jahr umgerechnet wird.

    Wenn du Strings speicherst, musst du eben vor dem Speichern das Format korrekt anwenden.

    Benutzt du eigentlich irgendwo DateTime.Parse ?

    Ich weiß, dass dir das wahrscheinlich alles nicht hilft: sorry, aber leider versteh ich dein Problem noch nicht 100%-ig.
     
  7. nklaer

    nklaer Byte

    hallo,

    also detaillierter zum problem (skizziert):

    datenbank:
    in mysql gibt es eine tabelle adressen in der u.a. zwei felder vom typ timestamp enthalten sind
    (bekanntlich werden diese felder bei mysql automaitsch mit der neuanlage eines datensatzes gefüllt, brauchen also nicht per script explizit gefüllt zu werden)

    anwendung:
    in .net gehe übernehme ich die adressen mit dbcommand- und dbdataadapert in ein datatable-objekt
    beim füllen dbdataadapter.fill(datatable) wird eine exception zurückgeworfen, weill .net nichts mit dem datumsformat von mysql anfangen kann, die datatable wird nicht gefüllt

    anmwerkung:
    verwende die idb...-objekte, damit ich von der datenbank unabhängig bin und sowohl per oledb, odbc, mysqlclient, etc. zugreifen kann.
    d.h. der code in .net soll unabhängig von der datenbank sein, daher auch möglichst keine umsetzung von formatierungen in den sql-befehlen, da ich sonst für jede datenbank eigene sql-befehle erstellen müsste

    ansatz:
    die datumsformate entsprechend im datenbankserver auf deutsch einstellen, damit aus .net immer die gleiche datenstruktur zugegriffen werden kann
     
  8. AS_X

    AS_X Halbes Megabyte

    Vielleicht liegt das Problem an der von dir verwendeten Software, die eine falsche Konvertierung versucht.

    Vielleicht kannst du hier Abhilfe schaffen, indem du die Funktion DATE_FORMAT von MySQL verwendest, die das Datum nach deinen Vorgaben formatiert. Siehe hier:

    http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_date-format

    Leider bist du dann abhängig von MySQL. Du kannst aber damit schon mal testen, ob das Datum in anderen Formaten funktionieren würde.
     
  9. kalweit

    kalweit Hüter der Glaskugel

    :grübel: - es geht doch nur um eine Ausgabeformatierung. Was spricht dagegen, das Datum erst nach der DB-Abfrage zu formatieren?
     
  10. nklaer

    nklaer Byte

    @kalweit

    wie as_x richtig bemerkt hat, bist du dann bzgl. der sql-sequenzen von der jeweiligen DB abhängig, d.h. für jede DB, die du anbinden/ansprechen willst müsstest du entsprechende sql-befehle im source-code verwenden (z.b. kennt access oder ms sql-server die DATE-FORMAT()-Funktion nicht) ;)

    gelle, comprende ...?
     
  11. kalweit

    kalweit Hüter der Glaskugel

    ...wie kommst du darauf? Was hat eine anschließende Stringoperation mit der sql-Abfrage selbst zu tun?

    ...und? Was hindert dich selbst eine passende Funktion zu schreiben. Ich setze z.B. grundsätzlich alle Daten in einer DB aus der Anwendung heraus, damit fallen alle Unpässlichkeiten der Datenbanken automatisch weg. Dazu benutze ich eine richtige DB-Abstraktionsebene, damit werden dann Anwendung und DB komplett getrennt und man kann je nach Ausbau der Abstraktion sogar spezifische Abfragen verwenden.
     
  12. nklaer

    nklaer Byte

    ok, machen wir es an einem beispiel fest:

    leg in mysql und access eine tabelle an:

    create table test (
    dat1 date,
    dat2 timestamp
    );

    dann erfass einen datensatz.

    versuch jetzt in .net eine datatable-objekt mit dieser tabelle zu füllen:

    dbcommand mit selectcommandtext = "select * from test"

    dbdataadapter mit dbcommand verbinden

    dbdatapater.fill(datatable)

    was ist dein ergebnis?
     
  13. kalweit

    kalweit Hüter der Glaskugel

    ...ich merke, du hast meine Posts nicht gelesen. Nun denn...

    :schlafen:
     
  14. nklaer

    nklaer Byte

    ... nun kapier ich deine antwort nicht

    was war denn jetzt an meiner letzten antwort falsch ..?

    für den sachverhalt brauchst du eine tabelle mit datumsfeldern
    in dieser tabelle stehen datensätze, wie die nun da reinkommen
    ist ja nunmal zunächst sekundär, die können ja auch per import
    in die tabelle übernommen werden ...
    entscheidend ist doch das diese daten wieder angezeigt und bearbeiten
    werden sollen ...

    also versteh ich deine letzte antwort in dem zusammenhang nicht
     
  15. AS_X

    AS_X Halbes Megabyte

    Hast du deine Tests eigentlich auch mal ohne diesen Layer, den du benutzt, gemacht? Also direkt mit dem MySQL-ADO.NET-Provider?
     
Thread Status:
Not open for further replies.

Share This Page