在 R 中使用 DBI 包附加到 SQL 服务器数据库时,字符列被转换为数字
Character columns being converted to numeric when appending to SQL Server Database with DBI package in R
我有一个使用 Microsoft SQL 服务器托管的数据库。它有一个 table project
列 project_id
(int identity
)、project_code
(nvarchar not null
) 和 api_form
(nvarchar
).我已经使用 R 中的 DBI
包和 运行 以下代码连接到此。
dbAppendTable(conn, 'project', data.frame(
project_code = c("ABC123", "DEF456"),
api_form = c(NA, NA)
))
然而,当我查询整个 table 时,我得到以下输出。
project_id project_code api_form
1 1 NULL
2 2 NULL
我不确定为什么字符现在是整数。有没有办法将字符数据直接添加到 table 或者,如果这是预期的行为,我如何查询 table 以找到我输入的实际文本?
默认情况下将字符串转换为因子的 data.frame()
调用的经典忽略。您的 project_code
呈现为因子(即带有标签值的数字列)而不是字符。要解决,只需传递 stringsAsFactors=FALSE
,这样实际的字符值就会附加到数据库 table:
dbAppendTable(conn, 'project',
data.frame(
project_code = c("ABC123", "DEF456"),
api_form = c(NA, NA),
stringsAsFactors=FALSE
)
)
或者,将参数设置为 R 会话中所有 data.frame()
调用的全局选项:
options(stringsAsFactors = FALSE)
dbAppendTable(conn, 'project',
data.frame(
project_code = c("ABC123", "DEF456"),
api_form = c(NA, NA)
)
)
我有一个使用 Microsoft SQL 服务器托管的数据库。它有一个 table project
列 project_id
(int identity
)、project_code
(nvarchar not null
) 和 api_form
(nvarchar
).我已经使用 R 中的 DBI
包和 运行 以下代码连接到此。
dbAppendTable(conn, 'project', data.frame(
project_code = c("ABC123", "DEF456"),
api_form = c(NA, NA)
))
然而,当我查询整个 table 时,我得到以下输出。
project_id project_code api_form
1 1 NULL
2 2 NULL
我不确定为什么字符现在是整数。有没有办法将字符数据直接添加到 table 或者,如果这是预期的行为,我如何查询 table 以找到我输入的实际文本?
默认情况下将字符串转换为因子的 data.frame()
调用的经典忽略。您的 project_code
呈现为因子(即带有标签值的数字列)而不是字符。要解决,只需传递 stringsAsFactors=FALSE
,这样实际的字符值就会附加到数据库 table:
dbAppendTable(conn, 'project',
data.frame(
project_code = c("ABC123", "DEF456"),
api_form = c(NA, NA),
stringsAsFactors=FALSE
)
)
或者,将参数设置为 R 会话中所有 data.frame()
调用的全局选项:
options(stringsAsFactors = FALSE)
dbAppendTable(conn, 'project',
data.frame(
project_code = c("ABC123", "DEF456"),
api_form = c(NA, NA)
)
)