MySQL忽略了虚拟TIMESTAMP列的可空性

时间:2018-09-04 18:18:17

标签: mysql

MySQL版本:5.7.22

我有一个带有JSON列的表。提出了一个新要求,我将需要为JSON文档的属性创建索引。

该字段是Date,以毫秒为单位(Javascript标准)以ISO 8601格式存储。

不能保证该字段存在于文档中,但通常会存在。

我正在尝试使用以下方法创建虚拟列:

alter table Drivers add column licenseExpiresAt timestamp 
    generated always as (
      STR_TO_DATE(
        JSON_UNQUOTE(
          JSON_EXTRACT(`licenseInfo`, '$.expiresAt')), '%Y-%m-%dT%H:%i:%s')) 
    virtual null after licenseInfo;

问题在于,只要我SELECT的数据来自此表,如果licenseExpiresAt属性没有设置,NULL列就会设置为当前时间戳,而不是expiresAt licenseInfo中不存在。

我在这里做什么错了?


编辑

如我所料,运行:

select * from Drivers where licenseExpiresAt is null

给我一​​个空的结果集。

清洗时:

select * from Drivers where licenseExpiresAt = NOW();

返回所有不具有.licenseInfo.expiresAt属性的行。

0 个答案:

没有答案