ssc.udf.register("getuuid", () => UUID.randomUUID().toString) val stuPCountDF_tmp1=ssc.sql("select * from stuPCountDF_tmp1 where stuId!='null' order by stuId").distinct() .selectExpr("getuuid() as id","" ,....) val dbInfo = XMLUtil.getDBProperties() val dbConn = dbInfo._1 val dbProp = dbInfo._2 val conn: Connection = XMLUtil.getConnection val basePsy = conn.createStatement() try { basePsy.executeUpdate(s"DELETE FROM edu_grade") } finally { basePsy.close() } stuPCountDF_tmp1.repartition(200).write.mode(SaveMode.Append).jdbc(dbConn, "psychology", dbProp)
結果出現:
Data truncation: Data too long for column 'id' at row 1
Caused by: org.springframework.dao.DataIntegrityViolationException: Could not execute JDBC batch update; nested exception is org.hibernate.exception.DataException: Could not execute JDBC batch update at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:639) at
Caused by: java.sql.BatchUpdateException: Data truncation: Data too long for column 'id' at row 1 at com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:1269) at com.mysql.jdbc.PreparedStatement.executeBatch(PreparedStatement.java:955) at
查詢得知:
如題:錯誤並非由於字段過長而致使出錯的,java
1. 多是由於數據庫裏的表設置的字符集不相同。mysql
2. 也可能真是數據庫字段裏數據庫確實過長(我是遇到的這種狀況)。spring
例如:在同一個數據庫中,存在utf8的表,也存在gbk_chinese_ci的表。sql
解決辦法:alter table `cms_activity_test` convert to character set gbk collate gbk_chinese_ci;(單獨修改指定表的字符集)數據庫
補充:經過在網上查找資料,通常都是修改數據庫MySQL的默認字符集和修改單個數據庫的字符集dom
1。 在Mysql數據庫目錄下找到my.ini文件,而後Ctrl+F查找character-set,修改ui
[client] port=3306 [mysql] default-character-set=utf8
2. 修改單個數據庫字符集,data目錄下找到db.opt文件,而後修改spa
default-character-set=gbk default-collation=gbk_chinese_ci
3. 用命令設置.net
mysql> SET character_set_client = utf8 ; mysql> SET character_set_connection = utf8 ; mysql> SET character_set_database = utf8 ; mysql> SET character_set_results = utf8 ; mysql> SET character_set_server = utf8 ; mysql> SET collation_connection = utf8 ; mysql> SET collation_database = utf8 ; mysql> SET collation_server = utf8 ;
4. 若是還嫌太麻煩了,就用一個蠢辦法,若是整個數據庫表很少且數據量不大的狀況下,就將整個庫導出,而後再去修改文件中字符集不一的表,最後再導入數據庫。。。hibernate