![](/img/trans.png)
[英]Convert all XML Special Characters back to Regular Characters (Within SQL)
[英]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.