请选择 进入手机版 | 继续访问电脑版
楼主: huapeng66
1173 9

[问答] R写入数据到MySQL中文乱码问题如何解决? [推广有奖]

  • 6关注
  • 0粉丝

博士生

47%

还不是VIP/贵宾

-

威望
0
论坛币
5217 个
通用积分
7.0196
学术水平
3 点
热心指数
4 点
信用等级
2 点
经验
19496 点
帖子
133
精华
0
在线时间
320 小时
注册时间
2018-9-16
最后登录
2023-3-21

huapeng66 学生认证  发表于 2021-3-1 14:50:33 |显示全部楼层 |坛友微信交流群
相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
问题如下:
  1. #-------------------------------------方式1-------------------------------------
  2. #加载包
  3. library(DBI)
  4. library(RMySQL)
  5. con=dbConnect(RMySQL::MySQL(),
  6.                   dbname='数据库名称',
  7.                   username='root',
  8.                   password='数据库密码',
  9.                   host='服务器IP')
  10. 设置格式
  11. dbSendQuery(con, "SET @@sql_mode=ANSI;")  # 启动非严格模式
  12. dbSendQuery(con, "SET NAMES utf8")      #切换字符格式,避免中文字符乱码

  13. #将数据写入数据库(接口,新建表名,数据框,参数设置)
  14. dbWriteTable(con,"data",data,overwrite =TRUE) #数据可以写入,表头正常显示,但是数据框内容的中文显示乱码
  15. #将表格中文从gbk转为UTF8格式
  16. for (i in names(data)){
  17. data[,i] <- iconv(data[,i],from="gbk",to="UTF8")
  18. }
复制代码
  1. #-------------------------------------方式2-------------------------------------
  2. library(RODBC)
  3. con <- odbcConnect('ODBC数据源名称',uid='root',pwd='数据库密码') #设置ODBC时,Details为GBK
  4. sqlSave(con,data,tablename = "data",append = TRUE) #显示报错,只能导入表头变量名,无法导入含中文的数据框内容
复制代码
这是MySQL数据的编码格式
微信截图_20210308232955.png

这是utf8通道写入中文数据的结果
微信截图_20210308233113.png

这是在R中GBK格式显示的数据
微信截图_20210308233142.png

这是在R中通过data[,i] <- iconv(data[,i],from="gbk",to="UTF8")将数据转化为utf8后写入MySQL后显示的格式
微信截图_20210308233557.png



二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:MySQL 中文乱码 sql password Library

huapeng66 学生认证  发表于 2021-3-1 14:53:09 |显示全部楼层 |坛友微信交流群
从服务器的MySQL中读取数据时,通过设置dbSendQuery(con, "SET NAMES GBK")中文数据可以正常显示。

使用道具

huapeng66 学生认证  发表于 2021-3-1 15:25:45 |显示全部楼层 |坛友微信交流群
MySQL当中已经有的中文表格,两种途径都可以正常读取。

使用道具

llb_321 在职认证  发表于 2021-3-1 17:51:10 |显示全部楼层 |坛友微信交流群
你导入数据时,RmySQL按你的指令把数据改成GBK,显示正常。但写入数据库时中文乱码,是因为数据库的设定不支持GBK。
需要确定SQL服务器数据库所采用的汉字编码。在数据库中,show variables like "char%",查看一下。
要么修改数据库的设置,要么把R改成数据库支持的中文编码,应该可以解决。

使用道具

huapeng66 学生认证  发表于 2021-3-2 07:46:51 来自手机 |显示全部楼层 |坛友微信交流群
llb_321 发表于 2021-3-1 17:51
你导入数据时,RmySQL按你的指令把数据改成GBK,显示正常。但写入数据库时中文乱码,是因为数据库的设定不 ...
谢谢,我今天尝试一下!

使用道具

yangming98 发表于 2021-3-2 18:05:32 来自手机 |显示全部楼层 |坛友微信交流群
huapeng66 发表于 2021-3-1 14:50
问题如下:
好的好的好的

使用道具

huapeng66 学生认证  发表于 2021-3-8 23:45:12 |显示全部楼层 |坛友微信交流群
llb_321 发表于 2021-3-1 17:51
你导入数据时,RmySQL按你的指令把数据改成GBK,显示正常。但写入数据库时中文乱码,是因为数据库的设定不 ...
麻烦您帮我看一下,我增加了过程截图,还是无法正常显示。另外想问下我在MySQL数据库中用root修改某个数据库的编码格式,其他数据库会跟着变化吗?

使用道具

huapeng66 学生认证  发表于 2021-3-9 10:30:10 |显示全部楼层 |坛友微信交流群
有三个新的疑问:
(1)同样的数据库编码设置,我在本地测试时,在R中将数据转为utf8之后可以写入MySQL,并且显示正常,但是写到服务器的MySQL时,则出现上面的显示乱码的情况。
(2)利用data[,i] <- iconv(data[,i],from="gbk",to="utf8")强制将数据转为utf8格式,读入的数据可以写到mysql,但是自创的数据框例如:
  1. fruits <-data.frame(id=1:5,name=c("苹果","香蕉","梨子","玉米","西瓜"),price=c(8.8,4.98,7.8,6,2.1),status=c("无","打折","无","售罄","批发"))  
  2. dbWriteTable(con,"fruits3",fruits,overwrite =TRUE)   #无法正常写入数据库
复制代码
(3)利用iconv转格式后,部分数据变成NA,不知为何?

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-3-29 15:33