dbeaver导入sql脚本报错的排查—— ERROR 1366 (HY000) at line

发布时间 2024-01-09 01:40:26作者: 雨中遐想

描述

在使用dbeaver进行sql脚本导入的时候报了以下的错误。

C:\Users\xxxx\AppData\Roaming\DBeaverData\drivers\clients\mysql_8\win\mysql.exe -u root --host=xxxxxxx --port=3306 xxx
任务  'MySQL 脚本' 开始于 Mon Jan 08 23:51:58 CST 2024
ERROR 1366 (HY000) at line 288: Incorrect string value: '\xA2\x9E' for column 'name' at row 1

任务  'MySQL 脚本' 结束于 Mon Jan 08 23:51:59 CST 2024
2024-01-08 23:51:59.224 - IO error: Process failed (exit code = 1). See error log.
2024-01-08 23:51:59.224 - java.io.IOException: Process failed (exit code = 1). See error log.
	at org.jkiss.dbeaver.tasks.nativetool.AbstractNativeToolHandler.validateErrorCode(AbstractNativeToolHandler.java:263)
	at org.jkiss.dbeaver.tasks.nativetool.AbstractNativeToolHandler.executeProcess(AbstractNativeToolHandler.java:241)
	at org.jkiss.dbeaver.tasks.nativetool.AbstractNativeToolHandler.doExecute(AbstractNativeToolHandler.java:283)
	at org.jkiss.dbeaver.ext.mysql.tasks.MySQLNativeToolHandler.doExecute(MySQLNativeToolHandler.java:47)
	at org.jkiss.dbeaver.tasks.nativetool.AbstractNativeToolHandler.lambda$0(AbstractNativeToolHandler.java:87)
	at org.jkiss.dbeaver.runtime.RunnableContextDelegate.lambda$0(RunnableContextDelegate.java:39)
	at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:122)

查了下网上以及社区的说法#4686, 大概意思是升级使用的驱动可解决。

排查

我检查了下连接的时候使用的驱动。

我这里一共有三个。

MySQL Binaries

这个是mysql8的驱动,我看到使用的是8.0.19版本的。

C:\Users\用户名\AppData\Roaming\DBeaverData\drivers\clients\mysql_8\win\mysql.exe

MySQL 5 Binaries

这个是mysql5的驱动,我看到使用的是5.5.62版本的。

C:\Users\用户名\AppData\Roaming\DBeaverData\drivers\clients\mysql\win\mysql.exe

E:/mysql

这个是我本地安装mysql带的驱动,版本是8.0.12。这个应该是会找bin下的mysql.exe

E:\mysql\bin\mysql.exe

我尝试改变使用这三种驱动,发现只有我本地安装的8.0.12导入sql脚本的时候是正常的。这就很离谱,因为MySQL Binaries使用的是8.0.19但是报错了。

我又查看了下数据库的编码。

show variables like '%char%';

除了一个character_set_system是utf8mb3外,其他看着没有什么问题。这个utf8mb3是怎么来的我还不太清楚,安装的时候我并未刻意设置。

我的sql脚本是UTF-8编码的,应该也没有问题。

我又试着使用了navicat进行导入sql脚本,也是没问题的,但是navicat在导入的时候可以设置编码。dbeaver上我没有看到有设置编码的地方。

继续寻找答案发现有人说可以在sql脚本的开头设置编码。我试着改了以下sql脚本。

set character set utf8mb4;
CREATE TABLE sys_user
(
    id          bigint NOT NULL AUTO_INCREMENT COMMENT 'id',
………………
………………
………………

然后尝试使用dbeaver下载的MySQL Binaries驱动进行脚本的执行,这次他成功了!

所以很大概率是dbeaver在执行脚本的时候所使用的编码导致的。

解决方案有三个:

  • 更换dbeaver的驱动。看缘分。

  • 在sql脚本的开头加上编码set character set utf8mb4;。 一般可行。

  • 在dbeaver编辑器里把需要执行的sql脚本拷贝过去执行。 有点蠢。