使用 RMySQL 的 UTF8 编码
UTF8 encoding using RMySQL
我正在尝试从 mysql 数据库中查询数据,其中当然包含一些字符串。对于连接和数据检索,我在 R 中使用 RMySQL,效果很好。除了一件事:我正在检索的字符串似乎不在 utf8 中。但我需要这个,因为我在这些字符串中有一些德语 "Umlaute" 。
当我询问 teh databse 时,它的编码是
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
希望有人知道如何处理它。如果需要其他信息,请询问。我可以提供。
我发现有些东西有点棘手,但对我有用:
您必须手动将数据框的列定义为 utf-8,如下所示:
x <- "Wünsche"
Encoding(x) <- "UTF-8"
x
[1] "Wünsche"
认为您必须对所有字符串向量执行此操作
编辑:
看看here
似乎通过在 dbSendQuery()
中添加 'set character set "utf8"'
来解决同样的问题
尝试使用 utf8/utf8mb4 时,如果看到 Mojibake,请检查以下内容。
此讨论也适用于 双重编码,不一定可见。
- 要存储的字节需要进行utf8编码。
INSERTing
和SELECTing
文本时的连接需要指定utf8或utf8mb4。
- 列需要声明
CHARACTER SET utf8
(或utf8mb4)。
- HTML 应该以
<meta charset=UTF-8>
. 开头
我的回答来自: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)
我正在尝试从 mysql 数据库中查询数据,其中当然包含一些字符串。对于连接和数据检索,我在 R 中使用 RMySQL,效果很好。除了一件事:我正在检索的字符串似乎不在 utf8 中。但我需要这个,因为我在这些字符串中有一些德语 "Umlaute" 。 当我询问 teh databse 时,它的编码是
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
希望有人知道如何处理它。如果需要其他信息,请询问。我可以提供。
我发现有些东西有点棘手,但对我有用:
您必须手动将数据框的列定义为 utf-8,如下所示:
x <- "Wünsche"
Encoding(x) <- "UTF-8"
x
[1] "Wünsche"
认为您必须对所有字符串向量执行此操作
编辑:
看看here
似乎通过在 dbSendQuery()
'set character set "utf8"'
来解决同样的问题
尝试使用 utf8/utf8mb4 时,如果看到 Mojibake,请检查以下内容。 此讨论也适用于 双重编码,不一定可见。
- 要存储的字节需要进行utf8编码。
INSERTing
和SELECTing
文本时的连接需要指定utf8或utf8mb4。- 列需要声明
CHARACTER SET utf8
(或utf8mb4)。 - HTML 应该以
<meta charset=UTF-8>
. 开头
我的回答来自: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)