插入UUID,出现Data truncation: Data too long for column 'id' at row 1

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

 
 
最后台:经过修改id的字段的长度解决 
相关文章
相关标签/搜索