我想将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
答案 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工作台执行,都没有关系。 *解决了问题*