在 DBeaver 中 MySQL 数据显示正常,但在 FineReport(帆软报表)中查询相同数据时出现中文乱码(如“笔记本电脑”变成“鎴戝姛椹”或“???”)。这是一个典型的字符编码不一致问题。虽然数据库中的数据存储正确,但 FineReport 在读取时未能正确识别 UTF-8 编码。
一、根本原因分析
| 原因 | 说明 |
|---|---|
| 数据库字符集为 | |
| 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
- 必须包含:
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.jarmysql-connector-j-8.0.xx.jar - 重启 FineReport 服务
注意:MySQL 8.0 必须使用 8.x 驱动,否则无法连接或出现编码异常。
方法 3:确认数据库字符集为 utf8mb4
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 - 测试数据集:


雷达卡


京公网安备 11010802022788号







