假设我有两个这样的表:
Events
ID (PK int autoInc), Time (datetime), Caption (varchar)
Position
ID (PK int autoinc), Time (datetime), Easting (float), Northing (float)
例如,如果我使用该Time
字段作为我的加入条件,列出所有事件及其位置是否安全?IE:
SELECT E.*,P.* FROM Events E JOIN Position P ON E.Time = P.Time
或者,甚至只是简单地比较一个日期时间值(考虑到参数化值可能包含小数秒部分 - MySQL 一直接受)例如
SELECT E.* FROM Events E WHERE E.Time = @Time
我了解 MySQL(5.6.4 版之前)只存储没有毫秒的日期时间字段。所以我会假设这个查询可以正常工作。但是,从 5.6.4 版开始,我已经阅读 MySQL 现在可以使用 datetime 字段存储毫秒数。
假设使用诸如 的函数插入日期时间值NOW()
,毫秒会被截断(<5.6.4),我认为这允许上述查询工作。但是,对于 5.6.4 及更高版本,这可能无法正常工作。我是,而且永远只会对第二精度感兴趣。
如果有人能回答以下问题,将不胜感激:
- 一般来说,MySQL 如何将日期时间字段相互比较(考虑上面的查询)。
- 上述查询是否正常,是否使用时间字段上的索引?(MySQL < 5.6.4)
- 有没有办法排除毫秒?即在插入和条件连接/选择等时?(MySQL > 5.6.4)
- 上面的连接查询会起作用吗?(MySQL > 5.6.4)
编辑
我知道我可以转换日期时间,感谢那些回答的人,但我正在尝试解决问题的根源(存储类型/定义已更改的事实)并且我不想在我的查询。这否定了我所有优化查询应用索引等的工作,更不用说必须重写我的所有查询。
编辑2
DATETIME
那里的任何人都可以提出不使用第二精度加入某个领域的理由吗?