Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当列类型为DATE时,MYSQL在SELECT查询中返回完整的datetime字符串_Mysql_Node.js_Date_Datetime - Fatal编程技术网

当列类型为DATE时,MYSQL在SELECT查询中返回完整的datetime字符串

当列类型为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

在谷歌上做了很多研究之后,我很难找到我问题的答案,但我的术语似乎不够准确,无法给出我问题的正确答案

我有一个数据库存储客户信息:名字、姓氏、生日等

这个问题与我的生日栏有关。类型设置为DATE,对于每个结果,所有内容都在phpmyadmin中显示为日期,但是当我在脚本中使用SELECT检索行时,除了值为0000-00-00之外,birthdate列将返回DATETIME类型

我在应用程序中使用节点mysql从mysql表中检索结果。我在节点mysql上构建了一个模块,以缩短池所需的代码,这就是DatabasePool函数的来源。下面是一个示例node.js代码,其中显示了该行为:

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
});