我正在使用DBI包和odbc包连接到SQL Server数据库。我正在尝试编写一个包含field.types
参数指定的列类型的表。由于某些原因,这不起作用,R在编写时选择自己的数据类型。
可重现的例子:
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)"
)
)
结果:一个名为“tableName”的表,其中包含列
[col1] [int] NULL,
[col2] [varchar](255) NULL
我的问题:
如何更正上面的示例,以便两列的数据库中的列类型都为varchar(50)
?
如何正确使用field.types
参数用于其他示例?
我想知道的是,我应该使用什么“类型”:我需要“int”或“integer”或“INT”(R区分大小写,这可能很重要)?然后,我在哪里可以找到这些数据类型的列表?我尝试使用dbDataType,但使用此函数返回的类型也不起作用。或者我做错了什么?
提前感谢您的帮助。
答案 0 :(得分:1)
我试过你的例子(略微修改):
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):