在 DBeaver 中 MySQL 数据显示正常,但在 FineReport(帆软报表)中查询相同数据时出现中文乱码(如“笔记本电脑”变成“鎴戝姛椹”或“???”)。这是一个典型的字符编码不一致问题。虽然数据库中的数据存储正确,但 FineReport 在读取时未能正确识别 UTF-8 编码。
一、根本原因分析
| 原因 |
说明 |
| 数据库字符集为 |
utf8mb4
|
| DBeaver 显示正常 |
说明数据本身没有问题 |
| FineReport JDBC 连接未指定编码 |
默认使用 GBK 或 ISO-8859-1 解析 UTF-8 字节,导致乱码 |
| 使用了旧版 MySQL 驱动(5.x) |
对 UTF-8 支持较差,容易出错 |
| Java 环境默认编码非 UTF-8 |
影响字符串解析 |
二、解决方案(按优先级排序)
方法 1:修改 FineReport 的 JDBC URL(最关键!)
在 FineReport 的「服务器」→「定义数据连接」中,找到你的 MySQL 连接,修改 JDBC URL,添加以下参数:
jdbc:mysql://localhost:3306/your_database?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
错误示例(缺少编码参数):
text
编辑
jdbc:mysql://localhost:3306/test
操作位置:
打开 FineReport 设计器 → 「服务器」→ 「定义数据连接」→ 修改现有连接或新建连接
方法 2:升级 MySQL JDBC 驱动(必须用 8.0+)
FineReport 可能自带的是旧版驱动(如
mysql-connector-java-5.1.x.jar
),它对 UTF-8 支持较差。步骤如下:
- 下载最新版 MySQL 驱动:
地址:https://dev.mysql.com/downloads/connector/j/
选择 Platform Independent → ZIP 下载
mysql-connector-j-8.0.xx.jar
- 替换 FineReport 的驱动文件:
路径:webapps/webroot/WEB-INF/lib/
删除旧的 mysql-connector-java-5.1.x.jar
,放入新的 mysql-connector-j-8.0.xx.jar
- 重启 FineReport 服务
注意:MySQL 8.0 必须使用 8.x 驱动,否则无法连接或出现编码异常。
方法 3:确认数据库字符集为 utf8mb4
运行以下 SQL 查看是否正确:
SHOW VARIABLES LIKE 'character_set%';
SHOW CREATE DATABASE your_db_name;
SHOW CREATE TABLE asset_info;
正确结果应为:
character_set_client = utf8mb4
character_set_connection = utf8mb4
character_set_database = utf8mb4
character_set_results = utf8mb4
character_set_server = utf8mb4
如果不是,请执行:
ALTER DATABASE your_db_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE asset_info CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
方法 4:设置 Java 启动参数(确保 JVM 使用 UTF-8)
本人通过使用方法 4 解决了乱码问题,具体步骤如下:
在 Windows 本地电脑上部署 FineReport,需要设置 Java 启动参数
-Dfile.encoding=UTF-8
,以确保 JVM 使用 UTF-8 编码,避免中文乱码。
正确解决方案:修改
designer.vmoptions
。FineReport 设计器是基于 Java 的桌面程序,其 JVM 启动参数由
.vmoptions
文件控制。
- 进入安装目录:
打开文件夹:D:\FineReport_11.0\
- 查找或创建配置文件:
在该目录下(不是 bin
文件夹内),查找以下文件之一:
designer.vmoptions
FineReport.vmoptions
- 注意:
.vmoptions
文件通常在主目录(与 bin
同级),而不是 bin
里面。
如果找不到,请手动创建:
在 D:\FineReport_11.0\
目录下 → 右键 → 新建 → 文本文档
输入内容:-Xms512m
-Xmx2048m
-Dfile.encoding=UTF-8
将文件重命名为:designer.vmoptions
(确保扩展名是 .vmoptions
,不是 .txt
)
如果系统隐藏了扩展名,请在“查看”中勾选“文件扩展名”,避免变成 designer.vmoptions.txt
- 完全关闭设计器:
关闭所有 FineReport 窗口
打开任务管理器(Ctrl+Shift+Esc)
结束所有 designer.exe
或 java.exe
进程
- 重新启动设计器:
双击 D:\FineReport_11.0\bin\designer.exe
启动
- 测试数据集: