繁体   English   中英

将特殊字符 SQL 编码为 R 并返回

[英]Encoding special characters SQL to R and back

我在将数据从 R 传递到 SQL 然后读回来时遇到问题 原始数据来自一些 excel 文件并具有以下字词: Průmyslový

使用latin1进行编码会贬低单词Prumyslový中的 u

使用latin2进行编码会改变 u Prùmyslový的重音

我可以使用哪种编码? 我正在使用 MS SQL 2016 服务器和 package DBI ,通常使用以下代码,其中单词是我正在写入服务器的数据帧的一部分。

我没有使用UTF-8因为这样öffentlicher变成öffentlicher

DBI::dbConnect(odbc::odbc(),
                      Driver = "SQL Server",
                      Server = "DBABMZ0006", 
                      Database = "EA_DB",
                      encoding = "latin1")

DBI::dbWriteTable(con,
                  Tabelle,
                  df_temp,
                  append=TRUE)

df_test<-DBI::dbReadTable(con,
                          Tabelle)

尝试编码 utf-8,它应该可以工作。

DBI::dbConnect(odbc::odbc(),
                      Driver = "SQL Server",
                      Server = "DBABMZ0006", 
                      Database = "EA_DB",
                      encoding = "UTF-8")

是此编码中的字符列表。

Latin1 编码不支持许多特殊字符,尤其是“€”符号,可以使用 Latin1 数据库排序规则将“€”符号保存在 varchar 类型的列中,这里是背景和解决方案:

我们的 Microsoft SQL 数据库设置为“Latin1_General_CI_AS”排序规则,这使用“iso_1”字符集。 简而言之,“iso_1”的意思是“ISO-8859-1”,但实际上是“Windows-1252”(CP1252)。 此处被 Microsoft 详细信息错误标记。

在我们的 R 安装的 Rprofile.site 配置文件中,我们将每个 R Session 的options(encoding = "UTF-8")设置为“UTF-8”作为默认值。

要检查您的 R 会话正在使用哪种编码,请执行getOption("encoding")命令。 如果您使用的是 Windows 并返回“native.enc”,那么我假设使用了“Windows-1252”编码(操作系统的编码)。

我们在表的列中使用VARCHAR类型,设置encoding = "CP1252" (SQL 数据库的编码)我们的问题就消失了:

 DBI = {
      dbconnection <- DBI::dbConnect(
        drv = odbc::odbc(),
        Driver = "ODBC Driver 17 for SQL Server",
        Server = instance,
        Database = database,
        # Encoding of SQL-Server, not latin1(!)
        encoding = "CP1252", 
        # Encoding of R sessions, Windows R default is "CP1252" (Windows-1252)
        clientcharset = "UTF-8" 
      )
    }

您也可以尝试将clientcharset属性设置为 R 会话的编码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM