ISO 8601 MySQL数据库时间戳:MySQL日期时间值不正确

Cha*_*ang 6 mysql datetime phpmyadmin iso8601 node.js

错误日志:

{[错误:日期时间值不正确:'2012-08-24T17:29:11.683Z'对于第1行的'robot _refreshed_at'列号]:1292,sqlStateMarker:'#',sqlState:'22007',消息:'不正确datetime value:\'2012-08-24T17:29:11.683Z \'for column \'robot_refreshed_at \'at row 1',sql:'INSERT INTO users(id,name,count_moments,count_likes,count_followers,rob ot_refreshed_at,robot_count_followers )VALUES(\'1834084 \',\'NNNyingzi \',\'5 \',\'0 \',\'0 \',\'2012-08-24T17:29:11.683Z \',\' 0 \')',setMaxListeners:[Function],emit:[Function],addListener:[Function],on:[Function],once:[Function],removeListener:[Function],removeAllListeners:[Function],listeners: [功能]}

我在我的代码中使用了这段代码 Node.js

  if s instanceof Date
         return s.toISOString()
Run Code Online (Sandbox Code Playgroud)

并在数据库中更新它们.

所述SQL插入物表达如下:

     INSERT INTO users (id,name,count_moments,count_likes,count_followers,rob ot_refreshed_at,robot_count_followers) VALUES (\'1834084\',\'NNNyingzi\',\'5\',\ '0\',\'0\',\'2012-08-24T17:29:11.683Z\',\'0\')
Run Code Online (Sandbox Code Playgroud)

我做错了吗?我只是使用PHPMyAdmin服务器中的表复制了一个表.

非常感谢.

egg*_*yal 11

日期和时间文字中所述:

MySQL 以这些格式识别DATETIMETIMESTAMP评估:

  • 作为字母'YYYY-MM-DD HH:MM:SS''YY-MM-DD HH:MM:SS'格式的字符串.这里也允许使用"宽松"语法:任何标点符号都可以用作日期部分或时间部分之间的分隔符.例如,'2012-12-31 11:30:45','2012^12^31 11+30+45','2012/12/31 11*30*45',和'2012@12@31 11^30^45'是相等的.

  • 作为字符串中没有分隔符'YYYYMMDDHHMMSS''YYMMDDHHMMSS'格式的字符串,前提是该字符串作为日期有意义.例如,'20070523091528'并且'070523091528'被解释为'2007-05-23 09:15:28',但是'071122129015'非法(它具有无意义的微小部分)并且变为'0000-00-00 00:00:00'.

  • 作为数字YYYYMMDDHHMMSSYYMMDDHHMMSS格式的数字,只要该数字作为日期有意义.例如,19830905132800并被830905132800解释为'1983-09-05 13:28:00'.

A DATETIMETIMESTAMP值可以包括高达微秒(6位)精度的尾随小数秒部分.尽管识别了该小数部分,但是从存储在DATETIMETIMESTAMP列中的值中丢弃它.有关MySQL 中小数秒支持的信息,请参见第11.3.6节"时间值中的小数秒".

您的日期字面值'2012-08-24T17:29:11.683Z'不适合任何这些格式; 建议你 -

  • 使用Node.js Date对象的toLocaleFormat()方法(确保MySQL连接的时区与Node.js的语言环境的时区匹配):

      if s instanceof Date
             return s.toLocaleFormat("%Y-%m-%d %H:%M:%S")
    
    Run Code Online (Sandbox Code Playgroud)
  • 使用Node.js Date对象的valueOf()方法获取自UNIX纪元以来的时间值(以毫秒为单位),除以1000(获得自UNIX纪元以来的秒数)并通过MySQL的FROM_UNIXTIME()函数.

  • 不同版本的“MySQL”有变化吗?我确信我复制表的服务器上运行正常。 (2认同)