Ulf Wendel

MaxDB Datentypen auf MySQL mappen: DATE, TIME, TIMESTAMP

Auf geht’s zu den letzten drei Datentypen, die gemappt werden müssen, wenn man von MySQL auf MaxDB portiert! MaxDB Datentypen auf MySQL mappen: Zeichenketten, BLOB/LONG und numerische Datentypen beschreibt das Mapping von Zeichenketten, BLOB/LONG und numerischen Datentypen.

Inhalt

Allgemeines

Wie auch beim letzten Blogeintrag eine Warnung: dies ist der aktuelle Stand des Mappings im MySQL MigrationToolkit (28.10.2005). Spätere Versionen können andere Zuordnungen vornehmen.

Beim Arbeiten mit den temporären Datentypen gibt es viele Fallstricke. MaxDB kennt mehrere Modi zu Speicherung von Datums und Zeitwerten: INTERNAL, ISO, EUR, JIS, USA. An die verschiedenen Modi sind unterschiedliche Wertebereiche und Darstellungsformen gebunden. Bei der Arbeit mit ODBC (SQL Studio) oder JDBC (MySQL MigrationToolkit) wird die Verwendung von ISO erzwungen. Das vereinfacht die Arbeit des MigrationToolkits, da nur noch Wertebereiche verwendet werden, die gemappt werden können. Andererseits bedeutet es auf, daß grundsätzlich Daten verloren gehen können! Also Achtung, wer mit ungewöhnlichen Daten arbeitet, sollte manuell kontrollieren.

/opt/sdb/programs/bin/dbmcli on TEST>param_directget DATE_TIME_FORMAT
OK
DATE_TIME_FORMAT        INTERNAL

---
/opt/sdb/programs/bin/dbmcli on TEST>param_getexplain DATE_TIME_FORMAT
OK
 Alterable default format of date, time and timestamp values for non-JDBC
 and non-ODBC applications

                        date format     time format timestamp format
                        __________________________________________________
 'INTERNAL'     YYYYMMDD        HHHHMMSS        YYYYMMDDHHMMSSMMMMMM
 'ISO'          YYYY-MM-DD      HH:MM:SS        YYYY-MM-DD HH:MM:SS.MMMMMM
 'EUR'          DD.MM.YYYY      HH.MM.SS        YYYY-MM-DD-HH.MM.SS.MMMMMM
 'JIS'          YYYY-MM-DD      HH:MM:SS        YYYY-MM-DD-HH.MM.SS.MMMMMM
 'USA'          MM/DD/YYYY      HH:MM AM        YYYY-MM-DD-HH.MM.SS.MMMMMM



---

Mapping von TIME

Der MySQL Wertebereich von TIME (-838:59:59 – 838:59:59) kann MaxDB TIME (ISO) Werte ohne Probleme aufnehmen.

MaxDB MySQL
Typ Wertebereich Typ
TIME 00:00:00 – 23:59:59 (DATE_TIME_FORMAT = ISO) TIME

Mapping von DATE

MySQL garantiert für den Datentyp DATE nur, daß der Bereich von “1001-01-01” bis “9999-12-31” supportet wird. MaxDB erweitert die untere Grenze auf “0001-01-01”. Es ist wahrscheinlich, daß MySQL diese Werte speichern und korrekt verarbeiten kann, aber es gibt keine Garantie. Wer Werte aus dem Bereich “0001-01-01” – “1000-12-31” hat, sollte nachprüfen ob alle Ergebnisse korrekt ausfallen. Weiterhin ist es ratsam, im MySQL Handbuch nachzulesen wie das Handling von ungültigen Datumsangaben erfolgt.

MaxDB MySQL
Typ Wertebereich Typ
DATE 0001-01-01 – 9999-12-31 (DATE_TIME_FORMAT = ISO) DATE

Mapping von TIMESTAMP

TIMESTAMP wird in DATETIME gemappt. Dies entspricht der Vorgehensweise beim MaxDB SQL-Mode des MySQL-Servers. Beim Mapping kann ein Datenverlust auftreten, weil bislang kein MySQL-Datentyp existiert der Mikrosekunden unterstützt. Ein MaxDB TIMESTAMP Wert hingegen kann eine bis zu 6-stellige Mikrosekundenangabe enthalten.

MaxDB MySQL
Typ Wertebereich Typ
TIMESTAMP 0001-01-01 00:00:00.000000 – 9999-12-31 23:59:59.999999 (DATE_TIME_FORMAT = ISO) DATETIME

Comments are closed.