dbeaver导入sql脚本报错的排查—— ERROR 1366 (HY000) at line
描述
在使用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 utf8; CREATE TABLE sys_user ( id bigint NOT NULL AUTO_INCREMENT COMMENT 'id', ……………… ……………… ………………
然后尝试使用dbeaver下载的MySQL Binaries驱动进行脚本的执行,这次他成功了!
所以很大概率是dbeaver在执行脚本的时候所使用的编码导致的。
解决方案有三个:
-
更换dbeaver的驱动。看缘分。
-
在sql脚本的开头加上编码
SET CHARACTER SET utf8;
或SET NAMES utf8mb4;
。 一般可行。 -
在dbeaver编辑器里把需要执行的sql脚本拷贝过去执行。 有点蠢。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战