从R将时间戳数据插入MySql数据库

时间:2018-10-08 09:06:31

标签: r

我想将R数据帧中的数据插入MySql表中。 除了列类型为timestamp的geburtstage之外,其他所有程序都工作正常。 数据框中的geburtstage列的类别为“ POSIXct”“ POSIXt”。 数据库中的结果始终为0000-00-00 00:00:00。

这是我的R会话:

library(XLConnect)
excel.file <- file.path("c:/path/test.xlsx")
elements <- readWorksheetFromFile(excel.file, sheet=1)
elements
       name nummer geburtsdatum
1     Anton      1   1967-05-11
2     Berti      2   1964-05-14
3     Conni      3   1967-01-01
4       Det      4   1967-01-01
5       Edi      5   1967-01-01
6 Fritzchen      6   1967-01-01

class(elements$geburtsdatum)
[1] "POSIXct" "POSIXt" 

library(RMySQL)
library(DBI)
con <- dbConnect(RMySQL::MySQL(), host = "127.0.0.1", user = "root", password = "xxxx", dbname = "test")
dbWriteTable(
+     conn = con,
+     name='testdaten3',
+     value = elements,
+     row.names = FALSE,
+     append = TRUE,
+     field.types = c(
+         name = "varchar(45)",
+         nummer = "tinyint",
+         geburtsdatum = 'timestamp'
+     )
+ )
[1] TRUE
--- end of R session ---

MySql数据库表testdaten3:

id      name    nummer  geburtsdatum
    1   Anton   1       0000-00-00 00:00:00
    2   Berti   2       0000-00-00 00:00:00
    3   Conni   3       0000-00-00 00:00:00
    4   Det     4       0000-00-00 00:00:00
    5   Edi     5       0000-00-00 00:00:00
    6   Fritzchen   6   0000-00-00 00:00:00

我已经尝试过像这样转换数据: elements $ geburtsdatum <-格式(elements $ geburtsdatum,'%Y-%m-%d%H:%M:%S') 但是结果是一样的。 我在Windows 8.1和MySql Server 5.6下使用R Studio版本1.1.456和R 3.5.1。

有人可以帮忙吗?

亲切的问候

Goetz Edinger

2 个答案:

答案 0 :(得分:0)

在您的示例中,geburtsdatum似乎只是一个日期,没有时间值。在那种情况下,为什么不使用as.Date(elements $ geburtsdatum)将其更改为数据框中的日期类型,然后使用CONCAT将其添加到MySQL数据库中呢?

赞:

this.state

基本上,您是将生日添加到占位符时间值中以制作时间戳。

答案 1 :(得分:0)

谢谢!! 我发现了错误。如果我使用的日期在“ 1970-01-01 01:00:01”之前,则数据库会将日期更改为“ 0000-00-00 00:00:00”。因此,如果我使用的日期等于“ 1970-01-01 01:00:01”或更晚的日期,则结果正确。无论是通过R还是通过MySQL工作台执行,都没有关系。 *解决了问题*