一、软件版本
- OS: Windows Server 2012 R2 标准版 64位版
- JDK: JDK8
- MySQL: 5.7.31
- 命令行工具:PowerShell
二、 BUG背景
在记录异常日志时,系统报 incorrect string value for column
异常,一般情况下这个就是数据库字符集的问题。
查看数据库表字符集的命令。
show full columns from [table]
OK,那就尝试修改一下,看一下结果,发生异常的是日志表
里的exception_detail
字段,使用上述命令查看其原字符集是UTF-8
,使用下述命令将其修改为utf8mb4
,依旧报错。
ALTER TABLE `sys_log`
DEFAULT CHARACTER SET=utf8mb4 COLLATE=utf8mb4_unicode_ci
那就排除这个修改项。
还有一种原因是,Tomcat
编码和数据库编码不一致,Windows
下Tomcat
默认编码为gbk
,若数据库编码为utf-8
,会导致中文无法插入。
因此,需要在Tomcat
启动参数中,虚拟机参数增加-Dfile.encoding=UTF-8
。
三、使用PowerShell和cmd启动jar包
注意:同样的命令, 如java -jar -Dxxx=xx
,在PowerShell
和在cmd
中运行结果是不同的。
如,在cmd
中,直接运行 java -Dfile.encoding=utf-8 -jar xxx.jar
完成程序执行。
但是在PowerShell
中,参数必须加引号,运行 java '-Dfile.encoding=utf-8' -jar xxx.jar
完成程序执行。如果不加引号,报加载不了主类
。
四、最佳实践
强烈推荐,在执行java程序时,参数部分,后续统一要求带文件的的编码方式。
java '-Dfile.encoding=utf-8' -jar xxx.jar