在springboot 的dao实例继承JpaRepository 进行入库save操作时,出现了“sql error 1064 sqlstate 42000”,直接是语法错误;理由就是我插入的数据里面包含了中文,越南语,泰语这些多国语言,在入库时插入别识别为乱码了,导致插入失败!
蹦到这个问题时各种翻查:
springboot的数据库连接配置,mysql本身的字符集,库的字符集,表的字符集,字段的字符集,通通查完了,都是utf-8;甚至都使用上string.getbytes("utf-8")了,依然无解!
sql直接在数据库执行时,所有的字段名,填写各种语言的值都能入库,不会报错;但是就是用jpa调用时不行;
翻看jpa的sql,对比发现唯一不一样的地方就是jpa在执行sql时拼接的字段名是没有带上``符号的;
这唯一的区别解决方案极其简单: 直接在你的entity定义中将所有字段的Column注释都加上,并且对于的字段名都带上``符号,例如:
@Column(name = "`key`") private String key;
改好后再次重试,问题被解决!
没想到jpa在识别entity的属性时只是拿到每一个属性和数据的字段做做比对,一致的就用,不一致就看column赋值,没有就报错;而且在用的时候根本就不管这种字段符号的事,天坑一个!