2017-08-22 5 views
0

Nachdem MySQL/MariaDB Tabelle erstellt wieMySQL Feld DATETIME- kürzt ISO8601

CREATE TABLE `testTable` (
    `id` int(11) NOT NULL, 
    `timeinfo` datetime DEFAULT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 

Und mit voller ISO8601 Wert wie folgt eingefügt:

MariaDB [test]> INSERT INTO testTable VALUES (1, '2500-12-31T00:00:00.000Z'); 
Query OK, 1 row affected, 1 warning (0.00 sec) 

MariaDB [test]> show warnings; 
+---------+------+-----------------------------------------------+ 
| Level | Code | Message          | 
+---------+------+-----------------------------------------------+ 
| Warning | 1265 | Data truncated for column 'timeinfo' at row 1 | 
+---------+------+-----------------------------------------------+ 
1 row in set (0.00 sec) 

MariaDB [test]> select * from testTable; 
+----+---------------------+ 
| id | timeinfo   | 
+----+---------------------+ 
| 1 | 2500-12-31 00:00:00 | 
+----+---------------------+ 
1 row in set (0.01 sec) 

ich nicht genau sehen, was abgeschnitten wird, die "Z" wie in ZULU TimeZone?


Ist es möglich, die Informationen vollständig im Feldtyp MySQL/MariaDB zu enthalten?

Wenn ja, welcher Felddatentyp sollte verwendet werden?

+2

sieht mir die Sekundenbruchteile abgeschnitten wurde .. in MySQL 5.7 und 5.3 MariaDB Sie Sekundenbruchteile Unterstützung mit '' timeinfo' Datetime (3) DEFAULT NULL aktivieren können, 'die (3) nach dem Datumzeit feststellen. –

+0

@RaymondNijland danke, das ist technisch korrekt, aber immer noch wird die Einfügung der Zeitzone abgeschnitten, nicht wahr? –

Antwort

1

Die Datenbank erwartet einen weiteren Eingang, der ist, warum Sie die Warnung erhalten

In MySQL DATETIME- muss das folgende Format

DATETIME- - Format: YYYY-MM-DD HH: MI: SS

Dies wird produzieren keine Warnungen:

INSERT INTO testTable VALUES (, '2500-12-31 00:00:00'); 

Auch mit Ihren Warnungen füllt die Datenbank Ihre Daten.

+0

Kann ich die Warnung von imezone irgendwie abgeschnitten werden? Ich brauche die Zeitzoneninformationen nicht gespeichert, da TIMEZONE von DB-Instanz/Server die gleichen ist wie alle eingegebenen Daten. Danke –

+0

Woher bekommen Sie diese Werte und verwenden Sie irgendeine Sprache dafür oder speichern Sie sie manuell in der Datenbank? – Noob

+0

@Noob interessant, dass in MySQL 5.7 können Sie "T" als Trennzeichen zwischen Datum und Uhrzeit verwenden: 2517-08-22T16: 55: 55 – olegsv

2

'Z' ist ein special time zone designator. Es bedeutet "Die Zeit ist in UTC-Zeitzone".

MySQL 5.7 Datetime und Zeitstempel-Typen sind nicht in der Lage die Zeitzoneninformationen zu speichern. MySQL versteht nicht "Z".

Wenn Sie die Zeitzone speichern müssen, verwenden Sie ein zusätzliches Feld.

+0

Kann ich die Warnung irgendwie loswerden? Ich brauche die Zeitzoneninformationen nicht gespeichert, da TIMEZONE von DB-Instanz/Server die gleichen ist wie alle eingegebenen Daten. Danke –

+0

@MarekSebera einfach. 'Einfügen in testtable Werte (1, ersetzen ('2017-08-22T16: 55: 55.000Z', 'Z', ''));' – olegsv

+0

ich, daß ich die Warnung durch die Daten zu modifizieren, befreien aber ich suche nach einem Weg, ohne die Daten zu berühren. So wie das Einstellen der DB-Instanz, so dass sie die Zeitzone ignoriert oder in diesem speziellen Fall keine Warnung ausgibt. Ich lade Massen von CSV-Daten. –

Verwandte Themen