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

标签 mysql node.js date datetime

在谷歌上进行了大量研究后,我很难找到问题的答案,但我的术语似乎不够准确,无法为我的问题提供正确的答案。

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

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

我正在使用 node-mysql 从我的应用程序中的 mysql 表中检索结果。我在 node-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,它将返回 { birthdate: Tue Aug 11 2015 00:00:00 GMT-0400 (EDT) },但对于日期 0000-00-00它将按预期返回 { birthdate: '0000-00-00' }

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

我尝试了以下方法:datetime mySQL SELECT only date

property: {
    get: function(id, callback) {
        mysql.DatabasePool(function() {
            this.query('SELECT date(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]));
            })
        });
    }
}

但日期仍然作为日期时间返回。

最佳答案

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

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

关于当列类型为 DATE 时,MYSQL 在 SELECT 查询中返回完整的日期时间字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32100434/

相关文章:

java - Pentaho 数据集成(最新版本)- 未检测到 MySQL 驱动程序

java - 在 Node js 中通过 AES/GCM/NoPadding 算法使用 key 和 iv 加密有效负载并在 java 中解密

r - 使用 ROracle dbWriteTable 将 POSIXct 写回 Oracle DB

javascript - 如果输入日期 2 <= 日期 1,则 JS 发出警报

javascript - Mongoose 对象关系

java - Java 中的 unix "date --date=..."

mysql - SQLSTATE[23000] : Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails error in Laravel 4

Mysql delete语句有限制

mysql - 日期之间的 SQL,包括开始日期和结束日期

javascript - 使用 res.json 立即返回响应