我正在尝试从包含一些字符串的mysql数据库中查询数据。对于连接和数据检索我在R中使用RMySQL,工作正常。除了一件事:我正在检索的字符串似乎不在utf8中。但我需要这个,因为我在这些字符串中有一些德语“Umlaute”。 当我问数据库时,它的编码是
dbGetQuery(db, "SHOW VARIABLES LIKE 'character_set_%';")
我得到了理想的答案:
Variable_name Value
1 character_set_client utf8
2 character_set_connection utf8
3 character_set_database utf8
4 character_set_filesystem binary
5 character_set_results utf8
6 character_set_server utf8
7 character_set_system utf8
8 character_sets_dir C:\\Program Files\\MySQL\\MySQL Server 5.7\\share\\charsets\\
但是,例如我收到了
Andreas Wünsche
而不是
Andreas Wünsche
希望有人知道如何处理它。如果需要额外的信息,请问。我可以提供它。
答案 0 :(得分:3)
我觉得有点棘手但对我有用:
您必须手动将数据框的col定义为utf-8,如下所示:
x <- "Wünsche"
Encoding(x) <- "UTF-8"
x
[1] "Wünsche"
认为你必须对你的所有字符串向量
执行此操作看看https://plnkr.co/edit/lsIypaBviXNvEi7Pwok4?p=info
似乎通过在'set character set "utf8"'
dbSendQuery()
来解决同样的问题
答案 1 :(得分:0)
尝试使用utf8 / utf8mb4时,如果看到 Mojibake ,请检查以下内容。 此讨论也适用于双重编码,这不一定是可见的。
INSERTing
和SELECTing
文字需要指定utf8或utf8mb4时的连接。CHARACTER SET utf8
(或utf8mb4)。<meta charset=UTF-8>
开头。答案 2 :(得分:0)
我从https://stat.ethz.ch/pipermail/r-sig-db/2012q1/001141.html那里得到了这个答案
在dbSendQuery
之前,您必须放置dbGetQuery(mydb, "SET NAMES 'utf8'")
mydb <- dbConnect(MySQL(), user = db_user, password = db_password,
dbname = db_name, host = db_host, port = db_port)
s=dbGetQuery(mydb, "SET NAMES 'utf8'")
s=paste0("select * from ", db_table)
rs=dbSendQuery(mydb, s)
df=fetch(rs, n = -1)