DBeaver中文乱码主因是连接层字符编码未对齐,需手动配置驱动属性characterEncoding=utf8mb4(MySQL)或charSet=AL32UTF8(Oracle)等,并确保useUnicode=true;同时全局工作区编码设为UTF-8。

DBeaver 的中文乱码,90% 是连接层字符编码没对齐,不是数据库本身的问题。 即使数据库表用的是 utf8mb4,只要 JDBC 连接参数或驱动属性里漏了关键配置,查出来就是问号或方块。
修改连接的 Driver Properties(最常漏的关键一步)
这是解决 MySQL/PostgreSQL 等 JDBC 数据库乱码的首要操作。DBeaver 不会自动把 characterEncoding 塞进连接串,必须手动加。
- 右键已建好的连接 →「编辑连接」→ 左侧选「连接设置」→ 右侧点开「驱动属性」
- 找已有属性:
characterEncoding,值设为utf8mb4;如果没有,点击「添加」手动输入 - 同时确保
useUnicode存在且值为true(缺一不可,只设characterEncoding不生效) - MySQL 用户注意:连接 URL 末尾也建议显式带上参数,例如:
jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8mb4
检查 DBeaver 全局工作区编码(影响脚本和结果集显示)
这个设置管的是 DBeaver 自身读写 SQL 文件、展示查询结果时用的编码,和数据库连接是两回事。很多人改了连接参数还乱码,就卡在这儿。
- 菜单栏 →「Window」→「Preferences」→「General」→「Workspace」
- 找到「Text file encoding」→ 选「Other」→ 明确设为
UTF-8 - 如果项目里有历史 SQL 脚本(比如从别人那儿拷来的 .sql 文件),右键该文件 →「Properties」→「Resource」→「Text file encoding」也要单独确认是
UTF-8 - Windows 用户特别注意:CMD 默认是 GBK,即使 DBeaver 设对了,用命令行导出再导入也可能二次乱码,建议用
Windows Terminal或Git Bash
Oracle / 达梦 / Informix 等非 MySQL 数据库要额外配 charSet
这类数据库的 JDBC 驱动不认 characterEncoding,得换参数名,否则白配。
- Oracle:驱动属性中加
charSet=AL32UTF8(服务端字符集需匹配) - 达梦 DM8:必须加
charSet=UTF-8,且连接字符串里还要带schema参数,否则元数据解析失败也会间接导致中文注释不显示 - Informix:ODBC 层要设
Client Locale为en_US.UTF-8,Database Locale为zh_CN.57372或对应服务端编码,不能勾选「Use Server Database Locale」 - 别信“自动检测”——这些数据库的驱动基本不支持自动编码协商,必须显式指定
验证是否真生效:别只看 SELECT,要测写入
只执行 SELECT 看中文正常,不代表连接编码真的通了。很多场景下读取缓存或字段默认值会掩盖问题,真正暴露在写入环节。
- 手动执行一条含中文的 INSERT,比如:
INSERT INTO t1(name) VALUES ('张三'); - 再
SELECT出来,确认值仍是 '张三',不是 '???' 或乱码 hex 值 - 如果插入后变乱码,说明
characterEncoding或charSet没起作用,或者数据库服务端实际字符集不是 UTF-8(如 MySQL 的my.cnf里collation-server还是latin1_swedish_ci) - 达梦用户注意:
charSet=UTF-8必须全大写UTF-8,写成utf8或utf-8(带短横但小写)都无效
最容易被忽略的是:同一套配置,在不同数据库类型下参数名、大小写、甚至连字符都不同。MySQL 要 characterEncoding,达梦要 charSet,Oracle 要 charSet 但值是 AL32UTF8 —— 混用就等于没设。











