gpt4 book ai didi

sql - DBI::dbWriteTable,无效的多字节字符串

转载 作者:行者123 更新时间:2023-12-03 22:10:43 27 4
gpt4 key购买 nike

从 MS Access 数据库导入的大型数据集,然后按日期对数据进行子集并导出到 SQL 数据库。

通过 sqlsave 命令导出工作正常,但是由于数据集的大小(超过 500,000 行,包含 73 个变量),它不适合。

尝试使用 odbc 写入数据会产生以下错误: nchar(as.character(x)) 中的错误:无效的多字节字符串,元素 62220

通过使用谷歌和浏览 Stackoverflow,我发现这个错误通常与数据中的非标准字符有关。

在尝试将表写入 SQL 之前,我已经使用 dplyr 删除了所有非标准字符,同样的错误。

然后我使用 UTF-8 编码将文件导出到 csv 并在尝试将表写入 SQL 之前使用 UTF-8 编码将其带回来,同样的错误。

最后,我尝试了一种指定最大列长度和格式为 varchar(255)、浮点数或日期的每列结构的方法。同样的错误。

library(odbc)
library(RODBC)
library(DBI)
library(data.table)

setwd("E:/BUS_INSIGHTS/David r scripts/PUNE_Claims")

odbcCEDBS0233 <- dbConnect(odbc::odbc(), dsn = "CEDBS0233")
CEDBS0233 = odbcConnect("CEDBS0233")

PUNE <- dbConnect(drv = odbc::odbc(), .connection_string = "Driver={Microsoft Access Driver (*.mdb, *.accdb)}; Dbq=E:/Motor/Data/ZC Combined/2018/1812/ZC Combined Pune.accdb")

PUNE <- subset(PUNE, DATE_OF_LOSS > as.Date("2009-01-01"))

require(dplyr)
clean <- PUNE %>%
mutate_all(funs(gsub("[[:punct:]]", "", .)))

DBI::dbWriteTable(con = odbcCEDBS0233,
name = SQL('PUNE_Claims'),
value = clean,
overwrite=TRUE,)

我尝试了各种其他方法,例如将 csv 直接写入 SQL(遗憾的是我们的 SQL 服务器不允许这样做)。使用正则表达式,以及我现在忘记的其他东西。

这里完全碰壁了,我不知道为什么 sqlsave 愉快地上传数据而 odbc 完全拒绝。

我找不到如何定位元素 62220 以查看有什么问题,但是使用 dplyr 清除任何坏字符应该没有问题。

我在你手中,任何帮助将不胜感激。

最佳答案

如果您知道哪个列导致此问题,则可以进行以下操作

x <- iconv(x,"WINDOWS-1252","UTF-8")

否则,只需在每一列中运行一个循环即可将其转换为 UFT-8
df[,sapply(df,is.character)] <- sapply(
df[,sapply(df,is.character)],
iconv,"WINDOWS-1252","UTF-8")

这应该可以解决问题。

关于sql - DBI::dbWriteTable,无效的多字节字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54633054/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com