【问题标题】:How to fix DATETIME truncation warnings while uploading CSV data into mySQL using Nodejs如何在使用 Nodejs 将 CSV 数据上传到 mySQL 时修复 DATETIME 截断警告
【发布时间】:2019-05-06 12:46:11
【问题描述】:

我正在获取 CSV 数据(来自使用 NPM 请求的 url),我使用 Nodejs 将其上传到 mySQL。此 CSV 数据已 created_at 列的值为“2015-10-19T04:00:00Z”。在 mySQL 中上传时,我想将此列的格式更改为“10/19/2015 4:00:00 AM”。

mySQL 表已创建数据类型为 DATETIME 的_at 列。但是,当我将 '2015-10-19T04:00:00Z' 上传到其中时,它会给出:- 警告消息是:消息:“第 24 行的列 \'created_at\' 的数据被截断”。如何在 NodeJS 的 mySQL 表中插入值之前更改数据格式?

var request = require('request');
var mysql = require('mysql');
var csvParser = require('csv-parse');
request(options, function (error, response, csvbody) { ...
csvParser(csvbody, { delimiter: ','}, function(err, data) { ...
con.query("INSERT INTO ?? VALUES ?", [mySQLTable, data], function(err, result) {...

【问题讨论】:

  • 如何将 Zulu 时间转换为 MySQL 可接受的格式stackoverflow.com/questions/21819295/…
  • 不要尝试将格式更改为10/19/2015 4:00:00 AM 如果用户希望看到它,您可以在表示层执行此操作。 MySQL Date 和 DateTime 列期望日期和时间采用固定格式 yyyy-mm-dd hh:ii:ss
  • 谢谢。我确实知道在 mySQL 中转换日期格式的方法。但不是在这种特殊情况下。您能否在下面查看我对Alessandro's 建议的回复并为您提供建议。提前致谢!
  • @RiggsFolly 添加您的用户名以便您收到通知
  • '2015-10-19T04:00:00Z' 插入 DATETIME 列应该可以工作!!!您不能将 10/19/2015 4:00:00 AM 加载到 DATETIME 列中。如果您的用户希望看到日期为10/19/2015 4:00:00 AM,您应该在表示层中执行此操作,而不是像在数据库中那样存储日期和时间

标签: mysql csv nodes


【解决方案1】:

尝试使用以下语句代替您的:

con.query("INSERT INTO ?? (field_name) VALUES (timestamp(substr('?',1,14)))", [mySQLTable, data], function(err, result) {...

它应该可以工作。

【讨论】:

  • 问题是data这里是csv-parse的输出,还有很多其他的列。如果数据只有 1 列,则上面的 timestamp 将起作用。如何仅将timestamp 应用于数据中的特定列。任何帮助将不胜感激。
  • 我想我使用下面的代码找到了我上面评论的部分解决方案。但是其他列现在是空白的,并且子字符串也不起作用。任何帮助将不胜感激
  • csvParser(csvbody, { delimiter: ',', cast: function(value, context){if(context.index === 5){ return substring(${value},1,19)}else{return context}},}, `
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-09
相关资源
最近更新 更多