从SQL Server数据库的R DBI包中使用dbWriteTable时,Field.types不起作用
问题描述:
我使用DBI包和odbc包连接到SQL Server数据库。我正在尝试编写一个表格,其中列出了field.types
参数指定的列类型。出于某种原因,这不起作用,R在编写时选择自己的数据类型。从SQL Server数据库的R DBI包中使用dbWriteTable时,Field.types不起作用
重复的例子:
table <- data.frame(
col1 = 1:2,
col2 = c("a", "b")
)
con <- dbConnect(
odbc::odbc(),
dsn = "dsn",
UID = login,
PWD = password,
Port = 1433
)
dbWriteTable(
conn = con,
value = table,
name = "tableName",
row.names = FALSE,
field.types = c(
col1 = "varchar(50)",
col2 = "varchar(50)"
)
)
结果:
-
我怎样才能更正我上面的例子:一个名为 “表名” 的列
[col1] [int] NULL, [col2] [varchar](255) NULL
我问表,这样两列的数据库上的列类型将为
varchar(50)
? 如何正确使用其他示例的
field.types
参数?
我想知道的是,什么是“类型”我应该用:我需要“内部”或“整数”或“INT”(R是大小写敏感的,所以可能重要)?然后,我在哪里可以找到这些数据类型的列表?我曾尝试使用dbDataType,但使用此函数返回的类型也不起作用。还是我在做其他事情?
在此先感谢您的帮助。
答
我想你的示例(性能稍微修改):
lybrary(RMySQL)
lybrary(lubridate)
conn=dbConnect(MySQL(), user='root', password='', dbname='DB', host='localhost')
table <- data.frame(
col1 = 1:2,
col2 = c("a", "b"),
col3 = c(now(), now()+seconds(1))
)
dbWriteTable(
conn = conn,
name='test_DB',
value = table,
row.names = FALSE,
field.types = c(
col1 = "varchar(50)",
col2 = "varchar(50)",
col3 = 'timestamp'
)
)
至少以下数据类型被接受(从DBI documentation):
- 整数
- numeric
- logical为布尔值(某些后端可能返回的整数)
- NA
- 字符
- 因子(绑定为字符,与警告)
- 日期
- POSIXct时间戳
- POSIXlt时间戳的
- 列表原始为blob(对于NULL NULL值,为NULL条目)
- blob :: blob类型的对象
你说得对。我重试了这个,现在它可以工作。很奇怪。我不确定这里发生了什么,但我很高兴它现在可以工作。谢谢! – Willem