为什么打包为可执行 jar,部分 SQL 语句就会乱码?

2018-08-06 09:33:45 +08:00
 linuxsteam

情景:最近在做一个处理大文本,导入到 SQL 的一个小工具。但是出于其他同事电脑,没有 JDK,所以只能画个 Swing 打包成带 jdk 的 exe 文件给他们用.

然而打包好 jar 运行就有问题。(swing 项目)

环境:JDK1.8,MYSQL5.7,WIN10,Netbean8.2

问题代码:

报错截图:

报错:java.sql.BatchUpdateException: Invalid utf8 character string: '\xB4\xF3\xBB\xB0\xB5\xA5\xC8\xAB\xCA\xA1201807'

乱码文字应该为:大话单 201807 (tableName)

经过以下尝试,都无效,不知道怎么办了。所以求助,解决了也方便后人查阅(我自己也会整理)

  1. jdbc characterEncoding 换过 utf8mb4,gbk 依旧报错
  2. 换数据库编码为 gbk 依旧报错
  3. 更改项目编码为 gbk 依旧报错
  4. 反编译打包后的 jar 中的文件也没有乱码现象 ...(排除编译器原因)

最重要的是!! sql1 建表语句用同样的 tableName 却不乱码(即不出现四字节情况\xB4 )。

1547 次点击
所在节点    问与答
14 条回复
wxyz
2018-08-06 09:59:13 +08:00
java -fileencoding=utf-8 试下
execute
2018-08-06 09:59:52 +08:00
你第一点提到了“ jdbc characterEncoding 换过 utf8mb4 ”这步操作,但是你在 sql 里面却又指定了 character set utf8,不矛盾吗?
wxyz
2018-08-06 10:00:07 +08:00
上面不专业,其实是-Dfile.encoding=UTF-8
alvinbone88
2018-08-06 10:10:17 +08:00
数据库的编码确定是 utf8mb4_unicode_ci / utf8mb4_unicode_520_ci?MySQL 里 utf8mb4 有好几十种编码
linuxsteam
2018-08-06 12:31:56 +08:00
@execute 之前我没有指定 character set 的 也就是默认创建的就是数据库的编码格式 即 utf8mb4
mmdsun
2018-08-06 12:36:27 +08:00
win10 可以改 cmd 的编码。你把 cmd 编码换成 utf-8
linuxsteam
2018-08-06 12:45:27 +08:00
@alvinbone88 utf8mb4_general_ci navicat 默认修改字符集 排序规则都是 general 的
linuxsteam
2018-08-06 12:53:25 +08:00
@wxyz 这个是在 cmd 里面添加吗 我试了还那样,无论您一楼的还是 3 楼的
linuxsteam
2018-08-06 13:00:09 +08:00
@wxyz 卧槽,三楼参数放前面就可以了 java -jar -Dfile.encoding=UTF-8 xxx.jar 那这个可以在双击运行的时候内置进去吗? 要不然 exe 没法加这样的参数啊
linuxsteam
2018-08-06 13:13:05 +08:00
@wxyz 刚刚又了解了一下该参数 就是指定 jvm 编码,windows 默认编码不是 gbk 吗,那我把项目改成 gbk 应该是可以解决问题的丫。。。。但是然并卵了。。。
wxyz
2018-08-07 08:32:20 +08:00
要把文件的转码成 gbk,才是真正的 gbk,这个是-D 是配置系统变量的,可以在程序里设置,有些地方你用了默认编码,就用的这个值。
x18960
2018-08-07 14:11:28 +08:00
@wxyz 这个在 windows 环境变量里面能设置一下吗?
wxyz
2018-08-08 10:03:17 +08:00
@x18960 应该不行吧,一个是环境变量,一个是系统变量
x18960
2018-08-08 12:16:17 +08:00
@wxyz 谢谢大佬

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/477144

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX