在 mysql 中使用 varchar(14) 作为日期时间

Using varchar(14) as datetime in mysql

我正在使用一个使用 varchar(14) 作为日期时间数据类型的数据库,在较旧的 table 中,它作为具有 DATEDIFF() 等功能的日期时间类型运行顺利。

我尝试使用此格式创建一个新的 table 并在此项目中保持一致,但它不适用于日期时间函数。是否有任何转换宏、自定义数据类型或全局函数可能引用了我需要为我的新 table 更新的这些旧列?我会在哪里寻找这些?

鉴于这两个 table:

 CREATE TABLE `working` (
  `id` varchar(30) NOT NULL DEFAULT '',
  `timecomplete` varchar(14) DEFAULT NULL,
  `count` int(10) unsigned NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`count`),
  UNIQUE KEY `unique_id` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=latin1

CREATE TABLE `notWorking` (
  `count` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `id` varchar(30) NOT NULL,
  `delDate` varchar(14) DEFAULT NULL,
  PRIMARY KEY (`count`),
  UNIQUE KEY `id` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8

第一个我可以查询 SELECT id FROM working WHERE DATEDIFF(NOW(), timecomplete) >1; 一切都很好。

第二次,SELECT id FROM notWorking WHERE DATEDIFF(NOW(), delDate) >1; returns 警告:Incorrect datetime value: '2018040305000' 虽然正确,但对我帮助不大。

我遇到了一个问题,即 varchar(14) 在 MySQL 中不能作为 DateTime 类型工作。事实证明我漏掉了一个数字。可在此处找到相关文档:https://dev.mysql.com/doc/refman/5.7/en/date-and-time-literals.html

具体来说,这一行回答了我在 MySQL 支持方面的很多问题。

MySQL recognizes DATETIME and TIMESTAMP values in these formats:

As a string with no delimiters in either 'YYYYMMDDHHMMSS' or 'YYMMDDHHMMSS' format, provided that the string makes sense as a date. For example, '20070523091528' and '070523091528' are interpreted as '2007-05-23 09:15:28', but '071122129015' is illegal (it has a nonsensical minute part) and becomes '0000-00-00 00:00:00'.