当列类型为DATE时,MYSQL在SELECT查询中返回完整的datetime字符串
在谷歌上做了很多研究之后,我很难找到我问题的答案,但我的术语似乎不够准确,无法给出我问题的正确答案 我有一个数据库存储客户信息:名字、姓氏、生日等 这个问题与我的生日栏有关。类型设置为DATE,对于每个结果,所有内容都在phpmyadmin中显示为日期,但是当我在脚本中使用SELECT检索行时,除了值为0000-00-00之外,birthdate列将返回DATETIME类型 我在应用程序中使用节点mysql从mysql表中检索结果。我在节点mysql上构建了一个模块,以缩短池所需的代码,这就是DatabasePool函数的来源。下面是一个示例node.js代码,其中显示了该行为:当列类型为DATE时,MYSQL在SELECT查询中返回完整的datetime字符串,mysql,node.js,date,datetime,Mysql,Node.js,Date,Datetime,在谷歌上做了很多研究之后,我很难找到我问题的答案,但我的术语似乎不够准确,无法给出我问题的正确答案 我有一个数据库存储客户信息:名字、姓氏、生日等 这个问题与我的生日栏有关。类型设置为DATE,对于每个结果,所有内容都在phpmyadmin中显示为日期,但是当我在脚本中使用SELECT检索行时,除了值为0000-00-00之外,birthdate列将返回DATETIME类型 我在应用程序中使用节点mysql从mysql表中检索结果。我在节点mysql上构建了一个模块,以缩短池所需的代码,这就是D
property: {
get: function(id, callback) {
mysql.DatabasePool(function() {
this.query('SELECT birthdate FROM ICM_Contact WHERE ICM_contact_id = ? LIMIT 1', [id], function(err, rows, fields) {
console.log(rows[0]);
callback(null, ICM.contact.revive(rows[0]));
})
});
}
}
对于给定日期:2015-08-11,它将返回{出生日期:2015年8月11日星期二00:00:00 GMT-0400(EDT)}
,但对于日期0000-00-00,它将返回{出生日期:'0000-00-00'}
我不知道为什么phpmyadmin无论如何都能正确显示日期,但是当我从脚本执行查询时,它不会正确返回日期
我尝试了以下方法:
但是日期仍然返回为datetime。您尝试过这个吗
property: {
get: function(id, callback) {
mysql.DatabasePool(function() {
this.query('SELECT DATE_FORMAT(birthdate,\'%m-%d-%Y\') FROM ICM_Contact WHERE ICM_contact_id = ? LIMIT 1', [id], function(err, rows, fields) {
console.log(rows[0]);
callback(null, ICM.contact.revive(rows[0]));
})
});
}
}
返回完整日期时间而不仅仅是日期的原因是节点mysql模块将所有mysql日期/日期时间数据类型强制转换为JavaScript日期对象。除了可接受的解决方案之外,还可以通过在连接中将
日期字符串设置为true
来关闭此功能:
const connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: 'password',
database: 'mydb',
port: '3306',
...
dateStrings: true
});
谢谢,我注意到节点mysql返回的值似乎是一个javascript日期对象,这解释了为什么日期返回为datetime,而phpmyadmin只返回日期。我认为,当您在数据库中存储日期时,它们会自动保存为UTC时间,例如“Wed Jul 23 2014 12:31:00 GMT+0000”。这就是为什么需要将日期/时间转换为字符串类型,然后将其返回给客户端。如果运行失败,请尝试从“'%m-%d-%Y'”更改为“'%m-%d-%Y'”,但由于phpmyadmin没有产生此行为,我决定在node.js中检查返回的行类型,它返回了一个日期对象,就像节点mysql正在将所有类似日期的类型转换为日期对象一样。我从ICM\U联系人(其中ICM\U联系人id=)中反斜杠如下“选择日期格式(生日,\'%m-%d-%Y\”)?限制1'
const connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: 'password',
database: 'mydb',
port: '3306',
...
dateStrings: true
});