sql >> Databasteknik >  >> RDS >> Mysql

MySQL från_unixtime efter 2038-01-19?

En lösning kan vara att använda DATE_ADD , men jag är inte säker på hur det beter sig prestandamässigt:

SELECT DATE_ADD(FROM_UNIXTIME(0), INTERVAL 2147483647 SECOND); //2038-01-19 04:14:07
SELECT DATE_ADD(FROM_UNIXTIME(0), INTERVAL 2147483648 SECOND); //2038-01-19 04:14:08
...
SELECT DATE_ADD(FROM_UNIXTIME(0), INTERVAL 4147483647 SECOND); //2101-06-06 07:47:27

Så för tillfället använder jag

...
CASE 
  WHEN `javaTimeStampColumn` > 2147483647 THEN
    CONVERT_TZ(DATE_ADD(FROM_UNIXTIME(0), INTERVAL `javaTimeStampColumn`/1000 SECOND),'+00:00','+00:00')
  ELSE  
    CONVERT_TZ(FROM_UNIXTIME(`javaTimeStampColumn`/1000), '+00:00','+00:00')
END as ts
FROM table
...

vilket borde minimera effekten på prestandan om det finns någon.




  1. Använd två tabeller på en php-sida (mysql)

  2. MySql Triggers för att radera underordnade poster i samma tabell

  3. Kommandon är osynkroniserade; du kan inte köra det här kommandot nu medan du anropar lagrad procedur i Mysql

  4. Utfasad MySQL-tillägg i PHP 5.5.x