当列类型为DATE时,MYSQL在SELECT查询上返回完整的日期时间字符串

时间:2015-08-19 15:58:16

标签: mysql node.js date datetime

在谷歌的许多研究之后,我很难找到我的问题的答案,但我的条款似乎不够准确,不能正确回答我的问题。

我有一个存储客户信息的数据库:名字,姓氏,出生日期等。

这个问题特定于我的生日专栏。类型设置为DATE,对于每个结果,所有内容都显示为phpmyadmin中的DATE,但是当我在脚本中使用SELECT来检索行时,将返回birthdate列,就像它是DATETIME类型一样,除非值为0000- 00-00。

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

class AFX_NOVTABLE CObject
{
//...
private:
    CObject(const CObject& objectSrc);              // no implementation
    void operator=(const CObject& objectSrc);       // no implementation
//...
}

对于指定日期:2015-08-11,它将返回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])); }) }); } } ,但对于date 0000-00-00,它将按预期返回{ birthdate: Tue Aug 11 2015 00:00:00 GMT-0400 (EDT) }

我不知道为什么phpmyadmin无论如何都能正确显示日期,但是当我从我的脚本执行查询时,它不会正确地返回日期。

我尝试了以下内容:datetime mySQL SELECT only date

{ birthdate: '0000-00-00' }

但是日期仍然以日期时间的形式返回。

2 个答案:

答案 0 :(得分:3)

你试过这个吗?

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

答案 1 :(得分:3)

返回完整日期时间而不是仅返回日期的原因是,节点mysql模块将所有mysql date / datetime数据类型强制转换为JavaScript Date对象。替代公认的解决方案,可以通过在连接中将dateStrings设置为true来关闭此功能:

const connection = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password: 'password',
    database: 'mydb',
    port: '3306',
    ...
    dateStrings: true
});