【问题标题】:UTF8 encoding using RMySQL使用 RMySQL 的 UTF8 编码
【发布时间】:2016-07-13 09:12:24
【问题描述】:

我正在尝试从 mysql 数据库中查询数据,其中当然包含一些字符串。对于连接和数据检索,我在 R 中使用 RMySQL,效果很好。除了一件事:我正在检索的字符串似乎不在 utf8 中。但我需要这个,因为我在这些字符串中有一些德语“元音变音”。 当我问数据库时,它的编码是

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

希望有人知道如何处理它。如果需要其他信息,请询问。我可以提供。

【问题讨论】:

  • 您是否尝试过更改 R 的默认编码?如果您使用的是 R studio,请转到:工具 -> 全局选项 -> 代码 -> 保存并放置 UTF-8
  • 是的,在 Rstudio 中已经设置为 utf8
  • 好的。我尝试使用一些 iconv 函数将 Wünsche 设置为正确的格式,但没有找到任何解决方案......我会继续

标签: mysql r utf-8 rmysql


【解决方案1】:

我觉得有些棘手但对我有用:

您必须像这样手动将数据框的 col 定义为 utf-8:

x <- "Wünsche"
Encoding(x) <- "UTF-8"
x
[1] "Wünsche"

认为您必须对所有字符串向量执行此操作

编辑:

看看here
似乎可以通过在dbSendQuery() 中添加'set character set "utf8"'来解决同样的问题

【讨论】:

  • 谢谢,这有帮助。但我想知道,这是怎么发生的,编码设置为“未知”。
  • 可能是 SQL 查询没有将格式应用到 R 对象
  • 字符集方法对我不起作用。我必须保留您的编码解决方法。再次感谢。
【解决方案2】:

我的回答来自:https://stat.ethz.ch/pipermail/r-sig-db/2012q1/001141.htmldbSendQuery 之前必须放置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)

【讨论】:

    【解决方案3】:

    在尝试使用 utf8/utf8mb4 时,如果您看到 Mojibake,请检查以下内容。 此讨论也适用于不一定可见的双重编码

    • 要存储的字节需要 utf8 编码。
    • INSERTingSELECTing时的连接文字需要指定utf8或utf8mb4。
    • 该列需要声明为CHARACTER SET utf8(或utf8mb4)。
    • HTML 应以 &lt;meta charset=UTF-8&gt; 开头。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-11
      • 2023-04-02
      • 2018-05-22
      • 2018-07-24
      • 1970-01-01
      • 2012-04-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多