在 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'.
我正在使用一个使用 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'.