Wir haben Daten als Unix-Zeitstempel gespeichert. Um es einem Benutzer zu ermöglichen, nach einem bestimmten Datum zu suchen - basierend auf seiner Zeitzoneneinstellung - haben wir diesen Zeitstempel innerhalb der Abfrage konvertiert, um sicherzustellen, dass bei einer Suche nach "2012-05-03" keine Ergebnisse des vorherigen/nächsten gefunden werden Tag abhängig davon, welche Zeitzone der Benutzer eingerichtet hat.MySQL von_Untimetime nach 2038-01-19?
Wenn ein Datum als 2012-05-03 23:00 (UTC)
gespeichert wird, sollte ein Benutzer mit dem richtigen Zeitzonenversatz, der nach 2012-05-04
sucht, diesen Eintrag finden.
Dies wird wie folgt zur Zeit getan:
CONVERT_TZ(FROM_UNIXTIME(`javaTimeStampColumn`/1000),'+00:00','+00:00')
wo OFC. Die Offsets werden abhängig von der Zeitzone des Benutzers festgelegt.
Das Problem, mit dem wir im Moment konfrontiert sind: Java speichert erfolgreich Daten nach dem Jahr 2038
als Unix-Timestamp. Die MySQL Verfahren from_unixtime
jedoch unterstützt keine Umwandlung von Werten größer als 2147483647
aufgrund seiner Integer-Typ Einschränkung:
SELECT FROM_UNIXTIME(2147483647); //2038-01-19 04:14:07
SELECT FROM_UNIXTIME(2147483648); //null
Der MySQL Server selbst 64bit, aber OFC. FROM_UNIXTIME
müsste lange als Argument akzeptieren.
Ich konnte jetzt keinen richtigen Ersatz finden, irgendwelche Hinweise?
Wir könnten Ofc. Laden Sie den Zeitstempel als Long und behandeln Sie es in der Anwendung - Aber für lazylaoding müssen wir in der Lage sein, es auch während der Abfrage korrekt zu konvertieren.
Gibt es einen Grund, den Datentyp nicht in 'datetime' zu ändern? –
@juergend Ja, leider werden die Daten von einem Teil der Anwendung erzeugt, wo wir das nicht ändern können. (3rd Party Library) – dognose
Haben Sie versucht, den Datentyp Ihrer Zeitstempelspalte in 'bigint' zu ändern? –