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 |