一、報(bào)錯(cuò)信息
SparkSql代碼寫入Mysql邏輯如下,代碼會(huì)自動(dòng)生成目標(biāo)Mysql表,報(bào)錯(cuò)如圖:
frame.createTempView("job_detail")
session.sql("select * from job_detail").show()
val url = "jdbc:mysql://XXXXX:3306/mydb?useSSL=false&useUnicode=true&characterEncoding=UTF-8"
val table = "mydb.job_detail_copy"
val properties = new Properties()
properties.setProperty("user","XXXX")
properties.setProperty("password","XXXX")
frame.write.mode(SaveMode.Append).jdbc(url,table,properties)
報(bào)錯(cuò)信息:
java.sql.BatchUpdateException: Incorrect string value: '\xE5\xBC\x80\xE5\x8F\x91...' for column 'job_name' at row 1

image.png
二、解決方案
原因:代碼自動(dòng)生成的目標(biāo)表字段和表編碼為latin1格式,導(dǎo)致數(shù)據(jù)寫入報(bào)錯(cuò)
解決方案:修改目標(biāo)表字段和表編碼格式為utf8
//修改目標(biāo)表所有字段編碼格式為utf8
alter table job_detail_copy convert to character set utf8;
//修改目標(biāo)表表編碼格式為utf8
alter table mydb.job_detail_copy character set utf8;