情况说明:用户使用DTS进行数据迁移,mysql8.0到dm7,在用DTS选择数据源并连接时报错。(使用默认驱动)
报错信息:Unknown character set index for field ‘255’ received from server.
该问题原因是MySQL版本高,mysql的jar版本低造成mysql与jar的编码错乱,也就是说默认的jar包版本过低。
于是指定对应mysql的新的驱动
再次指定新的驱动后仍然报错
报错信息:com/mysql/jdbc/Driver : Unsupported major.minor version 52.0
出现此问题的原因是jdk 版本与jdbc driver不兼容的问题,JDK的版本过低。jdk高版本能兼容低版本,但是低版本不能兼容高版本
查询网上相关资料得知:
major.minor version,它相当于一个软件的主次版本号,只是在这里是标识的一个Java Class的主版本号和次版本号。
J2SE 8 = 52,
J2SE 7 = 51,
J2SE 6.0 = 50,
J2SE 5.0 = 49,
JDK 1.4 = 48,
JDK 1.3 = 47,
JDK 1.2 = 46,
JDK 1.1 = 45
也就是说需要jdk1.8环境,而通过客户反馈的JDK版本情况,也是在使用JDK1.8
在达梦软件安装目录下,有一个jdk目录,达梦软件运行都是使用的此jdk环境。
解决办法,更换DTS使用的JDK环境:
方法一:关闭DTS工具。将已经存在的jdk文件备份一下,把要求的JDK1.8的环境拷贝过来,并重命名为jdk(注意:此方法由于会替换整个达梦数据库软件的JDK,即便JDK是向上兼容的,仍可能存在一定风险)
方法二:关闭DTS工具。进入达梦软件安装目录的tool目录,可以看到有一个dmt.ini文件,将此文件先备份,此处我备份为dts_bak.ini。
此时修改dts.ini文件,将原来使用的jdk更改为所需要的jdk版本
即修改…/jdk/bin为新jdk目录,我的目录是C:\Program Files\Java\jdk1.8.0_221\bin。
此时即完成了JDK的替换工作(此方法只更改了DTS使用的JDK版本,不会影响整个数据库软件)。
经过以上方法更换DTS使用的JDK版本后,再次打开dts工具,配置连接数据源,指定驱动, 并自动获取驱动类名。
此时点击下一步仍会报错。
报错信息:The server time zone value ‘�й���ʱ��’ is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the ‘serverTimezone’ configuration property) to use a more specifc time zone value if you want to utilize time zone support.
此错误主要是由于mysql8.0版本的使用的数据库连接字符串不一样,而且还对时区有要求,所以要勾选使用自定义URL选项,再引用下面的连接即可
url: jdbc:mysql://localhost:3306/<database_name>?characterEncoding=utf8&useSSL=false&serverTimeznotallow=UTC&rewriteBatchedStatements=true
此时再点击下一步就不会再报错,即能成功连接到mysql8.0。