MySQL VS. MariaDB 之日期格式差异


MariaDB Foundation 号称 MariaDB 是 MySQL 的替代品, 但我发现它们之间还是有些不兼容的地方(而且不在已列出的清单里). MariaDB 似乎对日期格式要求更为严格. 以下 SQL 的执行结果就很有不同, 在 MySQL 中 changed_at 是正常的 datetime, 但是在 MariaDB 中 changed_at 完全是 ‘0000-00-00 00:00:00’ 的样子.

INSERT INTO ...
 SELECT ...
  GREATEST( COALESCE(`inspection`.`ts`, 0), COALESCE(`inspection_details`.`ts`, 0), COALESCE(`open_time_reason`.`ts`, 0)
 ) AS `changed_at`
 ON DUPLICATE KEY UPDATE ...
 `changed_at` = VALUES(`changed_at`)

解决方法是添加一个明确的格式转换: CONVERT(… , DATETIME)

CONVERT(
 GREATEST( COALESCE(`inspection`.`ts`, 0), COALESCE(`inspection_details`.`ts`, 0), COALESCE(`open_time_reason`.`ts`, 0)
 ), datetime
 ) AS `changed_at`

我已经将此 bug 提交: https://mariadb.atlassian.net/browse/MDEV-8630

🙂