前言:网上搜集了很多资料,又惊醒了多次试探,终于成功了。
刚开始spark插入mysql的数据格式。

后面按照网上一顿更改my.ini文件也还是没有改好。


1、找到C:\ProgramData\MySQL\MySQL Server 5.7下的my.ini文件,右键用Notepad++打开,修改红色框的内容。
[client]
default-character-set=gbk
[mysql]
default-character-set=gbk
[mysqld]
character-set-server=utf8



2、创建表
create table day_video_city_access_topn_stat ( day varchar(8) not null, cms_id bigint(10) not null, city varchar(50) not null, times bigint(10) not null, times_rank int not null, primary key (day, cms_id, city) );
查看表的结构以及对应字符集,这时候默认的字符集就是utf8。

3、配置url
设置参数 useUnicode=true&characterEncoding=UTF-8

最后执行插入代码,执行过程中会报以下错:
1)报错MySQLIntegrityConstraintViolationException: Duplicate entry ‘79’ for key ‘PRIMARY’
这个的意思是mysql的符合主键会有重复,因为都是20170511 4000 ?的数据,引种中文乱码,city都是?所以会造成主键重复。
2)插入mysql时遇到问题java.sql.BatchUpdateException: Incorrect string value: ‘\xF0\x9D\x94\xB9+)…’ for column ‘city’ at row
这个是因为字段的值已经超出了字段的长度的限制了。刚开始的建表时候city的varchar(10)长度太短了,更改为varchar(50)这个问题就解决了。
查询mysql数据,中文乱码的问题终于解决了。


本文详细记录了解决Spark插入MySQL数据时出现的中文乱码问题和主键重复错误的全过程。通过修改MySQL配置文件my.ini中的字符集、调整字段长度并正确设置URL参数,最终实现了数据的正确插入。
1400

被折叠的 条评论
为什么被折叠?



