问题:
1.node+Mysql,查看数据库时区显示正确,但查询时,显示的确是另一个时区的时间。
2.前端调用接口返回:startTime: "2020-03-04T17:53:55.000Z"这样的格式
3.但查看数据库,时间显示是正确的格式:
4. 这个问题其实困扰了我很久,找的方法都一样,但是都解决不了,就一直搁置着,之前都是在搜mysql的时区问题,直到今天多加了个node关键词,才解决掉。论搜索的关键词的重要性!
解决:
1.按照百度的方法先修改了mysql的时区的配置
#登录数据库查看时区配置:
show variables like '%time_zone%';
# 仅修改当前会话的时区,停止会话失效
set time_zone = '+8:00';
# 修改全局的时区配置
set global time_zone = '+8:00';
flush privileges;
2.再查看一下,确认已经修改成功了,但是没用,返回的数据还是和修改之前的一样!
3.这时候还需要修改一下node对数据库的配置(dateStrings : true
):
var mysqlConfig = {
host: "localhost",
user: "root",
password: "123456",
port: "3306",
database: "sqltest",
dateStrings: true //修改日期格式 强制日期类型(TIMESTAMP, DATETIME, DATE)以字符串返回
};
module.exports = mysqlConfig
4.再查看一下,格式已经是正确返回了:
5. 再对比一下,确实,修改配置之前time的格式是红色的,并不是字符串类型;
附:
附node对mysql的其他配置及解释:
var mysqlConfig = {
host: 连接数据库所在的主机名. (默认: localhost)
port: 连接端口. (默认: 3306)
localAddress: 用于TCP连接的IP地址. (可选)
socketPath: 链接到unix域的路径。在使用host和port时该参数会被忽略.
user: MySQL用户的用户名.
password: MySQL用户的密码.
database: 链接到的数据库名称 (可选).
charset: 连接的字符集. (默认: 'UTF8_GENERAL_CI'.设置该值要使用大写!)
timezone: 储存本地时间的时区. (默认: 'local')
stringifyObjects: 是否序列化对象. See issue #501. (默认: 'false')
insecureAuth: 是否允许旧的身份验证方法连接到数据库实例. (默认: false)
typeCast: 确定是否讲column值转换为本地JavaScript类型列值. (默认: true)
queryFormat: 自定义的查询语句格式化函数.
supportBigNumbers: 数据库处理大数字(长整型和含小数),时应该启用 (默认: false).
bigNumberStrings: 启用 supportBigNumbers和bigNumberStrings 并强制这些数字以字符串的方式返回(默认: false).
dateStrings: 强制日期类型(TIMESTAMP, DATETIME, DATE)以字符串返回,而不是一javascript Date对象返回. (默认: false)
debug: 是否开启调试. (默认: false)
multipleStatements: 是否允许在一个query中传递多个查询语句. (Default: false)
flags: 链接标志.
}
参考连接:
MySQL查看和修改时区的方法nodejs中mysql用法Nodejs——Mysql时区问题