TiDB虽兼容MySQL协议但对连接参数更敏感,需使用MySQL 8.0+驱动(如mysql-connector-j 8.3+),URL须含useSSL=false、allowPublicKeyRetrieval=true、useServerPrepStmts=true、cachePrepStmts=true、serverTimezone=Asia/Shanghai、characterEncoding=utf8mb4,并禁用DBeaver自动提交与元数据缓存。

能连上,但默认配置大概率会卡住或报错——TiDB 虽然兼容 MySQL 协议,但它对连接参数、驱动行为和会话状态更敏感,尤其是高并发查询或大结果集场景。
用 MySQL 驱动连 TiDB,但必须改关键参数
TiDB 官方推荐使用 MySQL 8.0+ JDBC 驱动(mysql-connector-java 8.0.33+ 或 mysql-connector-j 8.3+),不能直接套用旧版 MySQL 5.7 驱动。DBeaver 默认可能带的是较老驱动,容易触发 Communications link failure 或 Unknown system variable 'tx_isolation' 错误。
- 在 DBeaver 的「驱动管理器」中新建或编辑 MySQL 驱动,确保
Driver files里加载的是mysql-connector-j-8.3.x.jar(不是mysql-connector-java) - URL 模板必须显式加上
&useSSL=false&allowPublicKeyRetrieval=true,否则 TiDB 8.0+ 默认拒绝非 SSL 连接 - 务必添加
&useServerPrepStmts=true&cachePrepStmts=true:TiDB 的 PrepareStatement 支持比 MySQL 更严格,关掉会导致Can't create PreparedStatement类错误
连接 URL 里别漏掉时区和字符集
TiDB 对 serverTimezone 和 characterEncoding 敏感,尤其当你的表含中文或时间字段时,不设会导致插入乱码、NOW() 返回 UTC 时间、或 Incorrect datetime value 报错。
- 完整 URL 示例:
jdbc:mysql://127.0.0.1:4000/test?useSSL=false&allowPublicKeyRetrieval=true&useServerPrepStmts=true&cachePrepStmts=true&serverTimezone=Asia/Shanghai&characterEncoding=utf8mb4 -
serverTimezone必须与 TiDB 配置中timezone一致(查SELECT @@global.time_zone;确认),不能写成CST这种模糊缩写 -
characterEncoding=utf8mb4是硬性要求,TiDB 不支持utf8别名(它只对应 3 字节 UTF-8)
测试连接成功后,立刻关掉「自动提交」和「元数据缓存」
DBeaver 默认开启「自动提交」和「缓存元数据」,这对 TiDB 反而容易出问题:比如执行 DDL 后刷新表结构失败、SHOW CREATE TABLE 返回过期定义、或者事务中误触自动提交导致部分写入。
- 右键连接 →
Edit Connection→Initialization标签页 → 勾选Disable auto-commit by default - 同页面 → 取消勾选
Cache metadata(TiDB 的表结构变更快,缓存反而导致 IDE 显示滞后) - 如果常查大表,顺手在
Connection settings → Driver properties里加maxRows=10000,避免一次拉光百万行卡死 UI
最易忽略的其实是 TiDB Server 的无状态特性:连接断开后不会保留临时表、用户变量或会话级 SET 变量。所以别依赖 SET @a:=1 这类语句跨语句生效——这不是 DBeaver 的问题,是 TiDB 架构决定的。











