乱码的问题通常都是编码不一致导致。
分析步骤
第一 落实应用的编码是什么。需要询问应用的开发人员。
第二 落实JVM的file.encoding 是什么?一般Windows环境是GBK,linux是UTF8。
第三 如果应用的编码和JVM的file.encoding一致,JDBC默认使用JVM的编码,不需要额外指定clientEncoding参数。否则需要指定JVM的-Dfile.encoding=GBK或者JDBC的clientEncoding参数
第四 如果还是报无效编码错误,就把JDBC日志打开到INFO或者TRACE,确认连接串信息对不对,再去看日志里是否有乱码数据。
编码解释
1:系统JVM的默认编码:file.encoding 通常和操作系统默认编码一样。当然用户可以同过jvm参数-Dfile.encoding=UTF8 来手动指定期望的编码格式。JDK1.7及以上的可以通过命令java -XshowSettings:properties –version 产看jvm参数值。
2:应用的编码:应用开发的时候自己指定的编码格式。通常应用的编码是要和运行环境的jvm的file.encoding保持一致。
3:JDBC的编码:JDBC通过参数clientEncoding指定编码格式,包括JDBC发给数据库的内容和返回给应用的内容都是按clientEncoding编码。通常需要和应用的编码保持一致。
4:数据库的编码:
client_encoding 就是客户端编码,JDBC通过clientEncoding指定。
server_encoding 就是服务端编码,这个是数据库自身存储时的编码。