【问题标题】:How to change dplyr::tbl connection encoding to utf8?如何将 dplyr::tbl 连接编码更改为 utf8?
【发布时间】:2015-09-05 02:46:59
【问题描述】:

在 MySQL 数据库中,表以 utf8 编码,但由于某种原因,连接是 latin1。

res <- RMySQL::dbSendQuery(con,"show variables like 'character_set_%'")
dbFetch(res)
           Variable_name                      Value
1     character_set_client                     latin1
2 character_set_connection                     latin1
3   character_set_database                    utf8mb4
4 character_set_filesystem                     binary
5    character_set_results                     latin1
6     character_set_server                     latin1
7     character_set_system                       utf8
8       character_sets_dir /usr/share/mysql/charsets/

This page explain how to set the connection's character set to utf8 using RMySQL.

RMySQL::dbGetQuery(con,"show variables like 'character_set_%'")
RMySQL::dbGetQuery(con,"set names utf8")

但我实际上更喜欢使用dplyr::tbl 来查询数据库。由于dplyr::src_mysql创建的连接只能发送创建表的sql语句。 dplyr设置连接设置使用utf8编码的方式是什么?

【问题讨论】:

  • @RomanLuštrik 我已经看到了,谢谢,我还使用带有iconv() 的临时解决方案将字符列转换为 utf8,但这是一个 hack,我宁愿直接在 utf8 中读取字符向量。特别是因为数据库已经是utf8。
  • 我感受到了你的痛苦。编码对于使用非 latin1 数据的每个人来说都是一个祸根。
  • 我实际上通过将数据库服务器配置设置更改为 utf8 并在 /etc/mysql/my.cf 中选择选项 skip-character-set-client 来解决此问题

标签: r dplyr rmysql


【解决方案1】:

我遇到了同样的问题,我解决了如下:

foo_db <- src_mysql(host='0.0.0.0',user='dbuser',password='a_password',
                    dbname='FlightTimes',port=3336)
dbGetQuery(foo_db$con,'SET NAMES utf8')

我发现这是可能的,通过str(foo_db) 查看foo_db 的结构,看到conMySQLConnection 的属性,然后应用你的dbGetQuery 咒语。

【讨论】:

    【解决方案2】:

    编辑服务器选项文件(在 Debian 系统上位于 /etc/mysql/my.cnf)并添加以下选项:

    collation-server = utf8_unicode_ci
    character-set-server = utf8
    skip-character-set-client-handshake
    

    mysql服务器配置文件也可以用mysql-workbench编辑。

    在此更改之后,dplyr::tbl 获取以 utf-8 编码的字符向量。

    【讨论】:

      猜你喜欢
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-24
      • 1970-01-01
      • 1970-01-01
      • 2016-11-18
      相关资源
      最近更新 更多