无法在R中更改数据框的编码

4

我正在尝试将数据库导入R中进行转换,并加载到另一个数据库中。我正在从RDS Mysql中提取我的数据集:

con <- dbConnect(MySQL(),
                   user = 'user',
                   password = 'password',
                   host = 'url',
                   dbname='dbName')

sqlcmd = paste("SELECT * FROM dbName.`users`");

contentTable = dbGetQuery(con,sqlcmd);

contentTable["first_name"]

这给我带来了不幸的输出结果

  first_name
1     Sergio
2       Sara
3   J\xfalia
4    Tatiana
5      Paula

我的问题是第三个名字应该返回为Júlia。这个问题在其他行中也发生过。
我的本地设置如下。
> Sys.getlocale()
[1] "pt_PT.UTF-8/pt_PT.UTF-8/pt_PT.UTF-8/C/pt_PT.UTF-8/en_US.UTF-8"

服务器的默认字符是

# Variable_name, Value
'character_set_client', 'utf8'
'character_set_connection', 'utf8'
'character_set_database', 'utf8'
'character_set_filesystem', 'binary'
'character_set_results', 'utf8'
'character_set_server', 'latin1'
'character_set_system', 'utf8'
'character_sets_dir', '/rdsdbbin/oscar-5.6.10a.14.15/share/charsets/'

我有些迷茫,正在考虑转向Python/Panda(该工具可以给我正确的字符,但我需要面对一些学习曲线才能完成下一步操作)。你有什么建议吗?

更新1:

SHOW CREATE TABLE users;
CREATE TABLE `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `first_name` varchar(255) NOT NULL,
  `last_name` varchar(255) NOT NULL,
  `email` varchar(255) NOT NULL,
  `birthday` date DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  `city` varchar(255) DEFAULT NULL,
  `state` varchar(255) DEFAULT NULL,
  `country` varchar(255) DEFAULT NULL,
  `beer_points` int(11) DEFAULT NULL,
  `access_token` text,
  `created_at` datetime NOT NULL,
  `updated_at` datetime NOT NULL,
  `profile_picture_file_name` varchar(255) DEFAULT NULL,
  `profile_picture_content_type` varchar(255) DEFAULT NULL,
  `profile_picture_file_size` int(11) DEFAULT NULL,
  `profile_picture_updated_at` datetime DEFAULT NULL,
  `role` varchar(255) DEFAULT NULL,
  `password_digest` varchar(255) DEFAULT NULL,
  `gender` varchar(255) DEFAULT NULL,
  `share_code` varchar(255) DEFAULT NULL,
  `privacy_enabled` tinyint(1) DEFAULT '0',
  PRIMARY KEY (`id`),
  UNIQUE KEY `index_users_on_email` (`email`),
  KEY `index_users_on_role` (`role`)
) ENGINE=InnoDB AUTO_INCREMENT=46 DEFAULT CHARSET=latin1

在将Júlia复制并粘贴到MySQL数据库中后,我无法重现您的问题。使用RMySQL进行远程连接以进行数据框导入后,Júlia成功导入。MySQL中是否显示带有重音符号的Júlia?此外,请检查您的数据库表的字符集:SHOW CREATE TABLE users - Parfait
@Parfait,MySQL(Workbench和Sequel Pro)中确实显示为Júlia。我添加了您要求的信息。谢谢! - brunoban
可能是您的UTF-8系统语言环境,我相信它是葡萄牙语,并尝试以latin1读取。请查看管理您的sys.locale()和/或更改 - Parfait
@Parfait 在此之前它是英语美式,将其更改为葡萄牙语是我尝试使其正常工作的事情之一。我目前正在使用Python进行操作,效果还可以,但我真的更喜欢R =( 非常感谢您的帮助,Parfait。 - brunoban
1个回答

1
这段代码可能对您的问题有用:

 con <- dbConnect(MySQL(),
               user = 'user',
               password = 'password',
               host = 'url',
               dbname='dbName')
 m <- dbGetQuery(con, "SET NAMES 'latin1'")
 sqlcmd <- paste("SELECT * FROM dbName.`users`");
 result <- dbGetQuery(con, sqlcmd)
 dbDisconnect(con)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接