首页 > 解决方案 > Sql 语句在 Maria DB 和 Mysql 上得到不同的结果

问题描述

表结构是:

+---------------+-------------+----------------+-----------+--------------------------+
| column_name   | is_nullable | column_default | data_type | character_maximum_length |
+---------------+-------------+----------------+-----------+--------------------------+
| id            | NO          | NULL           | int       |                     NULL |
| name          | NO          | NULL           | varchar   |                      100 |
| last_start    | YES         | NULL           | datetime  |                     NULL |
| y             | YES         | NULL           | varchar   |                        4 |
| m             | YES         | NULL           | varchar   |                        2 |
| d             | YES         | NULL           | varchar   |                        2 |
| h             | YES         | NULL           | varchar   |                        2 |
| i             | YES         | NULL           | varchar   |                        2 |
| s             | YES         | NULL           | varchar   |                        2 |
+---------------+-------------+----------------+-----------+--------------------------+

表中数据为:

+----+-------------------------+---------------------+------+------+------+------+------+------+
| id | name                    | last_start          | y    | m    | d    | h    | i    | s    |
+----+-------------------------+---------------------+------+------+------+------+------+------+
| 55 | daemon_service_service  | 2019-08-21 11:05:59 | NULL | NULL | NULL | NULL | NULL | NULL |
| 56 | daemon_ohrclean_service | 2019-08-21 10:47:59 | NULL | NULL | NULL | 05   | 00   | 00   |
| 57 | daemon_mqclean_service  | 2019-08-21 10:47:59 | NULL | NULL | NULL | NULL | NULL | NULL |
| 58 | daemon_loggrab_service  | 2019-08-21 10:59:59 | NULL | NULL | NULL | NULL | NULL | NULL |
| 59 | daemon_test1            | 2019-08-20 12:26:31 | NULL | NULL | 20   | 11   | 25   | 30   |
| 60 | daemon_test2            | 2019-08-20 12:26:31 | NULL | NULL | 20   | 11   | 25   | 30   |
| 61 | daemon_test3            | 2019-08-20 12:26:31 | NULL | NULL | 20   | 11   | 25   | NULL |
+----+-------------------------+---------------------+------+------+------+------+------+------+

SQL 语句为:

SELECT t.*, concat(ifnull(`y`,date_format(now(),'%Y')),'-',
                   ifnull(`m`,date_format(now(),'%m')),'-',
                   ifnull(`d`,date_format(now(),'%d')),' ',
                   ifnull(`h`,date_format(now(),'%H')),':',
                   ifnull(`i`,date_format(now(),'%i')),':',`s`)
FROM `daemon_service`  t 
where 
`s` is not null and 
last_start< concat(ifnull(`y`,date_format(now(),'%Y')),'-',
                   ifnull(`m`,date_format(now(),'%m')),'-',
                   ifnull(`d`,date_format(now(),'%d')),' ',
                   ifnull(`h`,date_format(now(),'%H')),':',
                   ifnull(`i`,date_format(now(),'%i')),':',`s`)

我有两个sql环境,一个是MariaDB 10.3.15,一个是Mysql 5.7.24

当我在上面运行sql时MariaDB 10.3.15,结果返回是正确的,这没什么。

但是当我运行 sql on 时Mysql 5.7.24,它返回 id 59 和 60,这是不正确的。

结果如下:

+----+-------------------------+---------------------+------+------+------+------+------+------+---------------------+
| id | name                    | last_start          | y    | m    | d    | h    | i    | s    | concat(ifnull(`y`...|
+----+-------------------------+---------------------+------+------+------+------+------+------+---------------------+
| 59 | daemon_test1            | 2019-08-20 12:26:31 | NULL | NULL | 20   | 11   | 25   | 30   | 2019-08-20 11:25:30 |
| 60 | daemon_test2            | 2019-08-20 12:26:31 | NULL | NULL | 20   | 11   | 25   | 30   | 2019-08-20 11:25:30 |
+----+-------------------------+---------------------+------+------+------+------+------+------+---------------------+

我的问题是:

  1. 是什么导致了这个问题?
  2. 如何使它正确Mysql 5.7.24

标签: mysqlmariadb

解决方案


推荐阅读