MySQL - 获取不带时区偏移量的日期

9
我在MySQL表中将出生日期(DOB)存储为日期列。 现在的问题是: 当我插入出生日期,例如2001/02/02时,我能够无问题地存储它。 但是,当我选择它(SELECT dob FROM table1),我得到的结果是UTC格式,如:2001-02-01T18:30:00.000Z。 我进一步挖掘发现这是由于UTC偏移量导致的。 有没有办法返回与表中存储的日期相同且不带UTC偏移量的日期?出生日期需要对所有时区保持恒定,而不考虑UTC。 注意:我不想更改服务器时区,因为我确实有某些列使用时间差异。 编辑:当我使用MySQL Workbench执行查询时,我得到了预期的结果,但是当我使用Node(mysqljs)时,我得到了时区格式的结果。 编辑:刚刚发现这是mysqljs的问题,因为它使用timezone属性连接到mysql服务器。 (https://github.com/mysqljs/mysql#connection-options) 提前感谢您。

这是否意味着dob是datetime类型而不是date类型?时间是如何包含在输出中的?如果这是日期列的某种神秘(对我来说)症状,您能否编辑您的问题并包含一个链接从您的“进一步挖掘”中,请?我很好奇。 - UncleCarl
@UncleCarl 不是的,DOB 是一个日期列。 - Dev Aggarwal
使用设置 dateStrings: true 达到了我的目的 => "强制日期类型(时间戳,日期时间,日期)以字符串形式返回..." 它以某种默认格式无需更改地返回了日期时间 - Azzy
4个回答

9

所以,这是一个mysqljs的问题,我在创建连接时使用了timezone选项。mysqljs默认使用local作为timezone选项,并将其设置为Z似乎可以解决我的问题。

以下是示例:

`mysql.createPool({
  connectionLimit: mySQLConfig.connectionLimit,
  host: mySQLConfig.host,
  user: mySQLConfig.username,
  password: mySQLConfig.password,
  database: mySQLConfig.database,
  timezone: 'Z'
});`

3
您可以尝试在mysqljs连接参数中设置dateStringstrue。这里的问题是mysqljs将其转换为JavaScript日期对象,因此它将作为一个带有您期望数据的字符串返回。

是的,这是mysqljs的问题。 - Dev Aggarwal

1
如果您只想忽略时区,请使用MySQL date
select date(dob) from table1

但结果将会是 'yyyy-mm-dd'。
如果您希望格式为 '2001/02/02':
select DATE_FORMAT(dob,'%y/%m/%d') from table1

没有运气。更令人惊讶的是,当我使用MySQL Workbench执行查询时,可以毫无问题地获得实际结果。但是当我使用Node(mysqljs)时,我得到的结果是UTC时区。 - Dev Aggarwal

1

首先,这不是一个错误。mysql npm 这样做是为了避免不同时区之间的时间冲突。但在本地工作时,这有点恶心。

为了避免这种情况,您可以添加一个连接选项叫做 "timezone",并将其设置为 "local" 或 "Z"。

var mysql      = require('mysql');
var connection = mysql.createConnection({
    host     : 'example.org',
    user     : 'bob',
    password : 'secret',
    timezone : 'local'
});

参考文献:- mysql npm doc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接