Field.types 在 SQL 服务器数据库中使用 R DBI 包中的 dbWriteTable 时不工作
Field.types not working when using dbWriteTable from R DBI package in SQL Server database
我正在使用 DBI 包和 odbc 包连接到 SQL 服务器数据库。我正在尝试使用 field.types
参数指定的列类型编写 table。出于某种原因,这不起作用,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" 的 table 列
[col1] [int] NULL,
[col2] [varchar](255) NULL
我的问题:
我如何更正上面的示例,以便数据库中两列的列类型都为 varchar(50)
?
如何在其他示例中正确使用 field.types
参数?
我想知道的是,我应该使用什么 "types":我需要 "int" 或 "integer" 还是 "INT"(R 区分大小写,因此它可能重要)?然后,我在哪里可以找到这些数据类型的列表?我尝试过使用 dbDataType,但是使用此函数 returns 的类型也不起作用。还是我做错了什么?
在此先感谢您的帮助。
我试过你的例子(稍作修改):
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):
- 整数
- 数字
- 逻辑布尔值(一些后端可能 return 一个整数)
- 不适用
- 字符
- 因子(绑定为字符,带有警告)
- 日期
- POSIXct 时间戳
- POSIXlt 时间戳
- blob 的原始列表(SQL NULL 值的 NULL 条目)
- blob::blob
类型的对象
我正在使用 DBI 包和 odbc 包连接到 SQL 服务器数据库。我正在尝试使用 field.types
参数指定的列类型编写 table。出于某种原因,这不起作用,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" 的 table 列
[col1] [int] NULL,
[col2] [varchar](255) NULL
我的问题:
我如何更正上面的示例,以便数据库中两列的列类型都为
varchar(50)
?如何在其他示例中正确使用
field.types
参数?
我想知道的是,我应该使用什么 "types":我需要 "int" 或 "integer" 还是 "INT"(R 区分大小写,因此它可能重要)?然后,我在哪里可以找到这些数据类型的列表?我尝试过使用 dbDataType,但是使用此函数 returns 的类型也不起作用。还是我做错了什么?
在此先感谢您的帮助。
我试过你的例子(稍作修改):
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):
- 整数
- 数字
- 逻辑布尔值(一些后端可能 return 一个整数)
- 不适用
- 字符
- 因子(绑定为字符,带有警告)
- 日期
- POSIXct 时间戳
- POSIXlt 时间戳
- blob 的原始列表(SQL NULL 值的 NULL 条目)
- blob::blob 类型的对象