strong如何配置mysql时区?

strong如何配置mysql时区?,mysql,timezone,loopbackjs,strongloop,Mysql,Timezone,Loopbackjs,Strongloop,我是strongloop的新手。My datasources.json配置如下: "platformDB": { "host": "localhost", "port": 3306, "database": "way", "username": "root", "password": "root", "name": "platformDB", "connector": "mysql" }, "name": "UserAccount", "plural": "user", "base": "Pe

我是strongloop的新手。My datasources.json配置如下:

"platformDB": {
"host": "localhost",
"port": 3306,
"database": "way",
"username": "root",
"password": "root",
"name": "platformDB",
"connector": "mysql"
},
"name": "UserAccount",
"plural": "user",
"base": "PersistedModel",
"idInjection": true,
"properties": {
"id": {
  "type": "number",
  "required": false
},
"accountName": {
  "type": "string",
  "required": false
},
"roleName": {
  "type": "string",
  "required": false
},
"accessToken": {
  "type": "string",
  "required": false
},
"loginTime": {
  "type": "date",
  "required": false,
  "mysql": {
    "dataType": "datetime"
  }
}
var options = {
host: s.host || s.hostname || 'localhost',
port: s.port || 3306,
user: s.username || s.user,
password: s.password,
timezone: s.timezone,
socketPath: s.socketPath,
charset: s.collation.toUpperCase(), // Correct by docs despite seeming odd.
supportBigNumbers: s.supportBigNumbers,
connectionLimit: s.connectionLimit
};
UserAccount是我的一个模型,如下所示:

"platformDB": {
"host": "localhost",
"port": 3306,
"database": "way",
"username": "root",
"password": "root",
"name": "platformDB",
"connector": "mysql"
},
"name": "UserAccount",
"plural": "user",
"base": "PersistedModel",
"idInjection": true,
"properties": {
"id": {
  "type": "number",
  "required": false
},
"accountName": {
  "type": "string",
  "required": false
},
"roleName": {
  "type": "string",
  "required": false
},
"accessToken": {
  "type": "string",
  "required": false
},
"loginTime": {
  "type": "date",
  "required": false,
  "mysql": {
    "dataType": "datetime"
  }
}
var options = {
host: s.host || s.hostname || 'localhost',
port: s.port || 3306,
user: s.username || s.user,
password: s.password,
timezone: s.timezone,
socketPath: s.socketPath,
charset: s.collation.toUpperCase(), // Correct by docs despite seeming odd.
supportBigNumbers: s.supportBigNumbers,
connectionLimit: s.connectionLimit
};
当我调用UserAccount.create和UserAccount.findById函数时,它们的结果是正常的。但当我通过客户端工具连接mysql数据库时,我发现“loginTime”的值是utc时间。这个结果与其他系统组件不协调,总之,我需要本地时间。 所以我跟踪环回连接器mysql源代码,在datasource中找到timezone属性,如下所示:

"platformDB": {
"host": "localhost",
"port": 3306,
"database": "way",
"username": "root",
"password": "root",
"name": "platformDB",
"connector": "mysql"
},
"name": "UserAccount",
"plural": "user",
"base": "PersistedModel",
"idInjection": true,
"properties": {
"id": {
  "type": "number",
  "required": false
},
"accountName": {
  "type": "string",
  "required": false
},
"roleName": {
  "type": "string",
  "required": false
},
"accessToken": {
  "type": "string",
  "required": false
},
"loginTime": {
  "type": "date",
  "required": false,
  "mysql": {
    "dataType": "datetime"
  }
}
var options = {
host: s.host || s.hostname || 'localhost',
port: s.port || 3306,
user: s.username || s.user,
password: s.password,
timezone: s.timezone,
socketPath: s.socketPath,
charset: s.collation.toUpperCase(), // Correct by docs despite seeming odd.
supportBigNumbers: s.supportBigNumbers,
connectionLimit: s.connectionLimit
};

因此,我在datasources.json中配置“timezone”:“utc8”,UserAccount.findById函数结果是客户端工具的eqauls,但UserAccount.create函数结果仍然是utc时间。这就是为什么?

唯一的解决方案是修改核心文件。 编辑/var/www/yourproject/node_modules/loopbackconnector mysql/lib/mysql.js

改变

function dateToMysql(val) {
  return val.getUTCFullYear() + '-' +
    fillZeros(val.getUTCMonth() + 1) + '-' +
    fillZeros(val.getUTCDate()) + ' ' +
    fillZeros(val.getUTCHours()) + ':' +
    fillZeros(val.getUTCMinutes()) + ':' +
    fillZeros(val.getUTCSeconds());

  function fillZeros(v) {
    return v < 10 ? '0' + v : v;
  }
}
函数dateToMysql(val){ 返回值getUTCFullYear()+'-'+ 填充零(val.getUTCMonth()+1)+'-'+ 填充零(val.getUTCDate())+“”+ fillZeros(val.getUTCHours())+':'+ fillZeros(val.getUTCMinutes())+':'+ fillZeros(val.getUTCSeconds()); 函数fillzero(v){ 返回v<10?'0'+v:v; } } 到

***函数dateToMysql(val){
返回值getFullYear()+'-'+
填充零(val.getMonth()+1)+'-'+
填充零(val.getDate())+“”+
填充零(val.getHours())+':'+
填充零(val.getMinutes())+':'+
fillzero(val.getSeconds());
函数fillzero(v){
返回v<10?'0'+v:v;
}
}***
这会节省你的时间
别忘了投票;-)

您还可以通过向datasource JSON配置添加时区条目来设置运行API的服务器的时区:

datasources.json:

{
  "mysqlDS": {
    "name": "mysqlDS",
    "connector": "mysql",
    "host": "localhost",
    "port": 3306,
    "database": "dbname",
    "username": "root",
    "password": "",
    "timezone": "UTC"
  }
}
然后可以使用环境变量在datasources.local.js中的生产环境上覆盖:

datasources.local.js:

module.exports = {
  "mysqlDS": {
    host    : process.env.APP_MYSQL_HOST,
    port    : process.env.APP_MYSQL_PORT,
    database: process.env.APP_MYSQL_DB,
    username: process.env.APP_MYSQL_USER,
    password: process.env.APP_MYSQL_PW,
    timezone: process.env.APP_MYSQL_TZ
  }
}
也可能只是不签入datasources.json并使其成为所有环境的部署/构建配置的一部分