使用mybatis删除分区时失败 TiDB版本为4.X

使用mybatis删除表中的分区时出现了java.sql.SQLException: json: cannot unmarshal string into Go value of type []string的异常,这种情况要如何修改sql呢
image

直接用 mysql client 命令行可以执行么?

另外 jdbc 用的什么版本呢?

使用mysql client执行同样的sql是可以的,jdbc的版本是5.2.8

换成 tidb 专用的试试
https://docs.pingcap.com/zh/tidb/stable/dev-guide-choose-driver-or-orm

你这个感觉是代码问题,都没到数据库执行。。。。。 :rofl:

感谢大佬,我先试试

image
尝试直接用jdbc来执行,还是 json: cannot unmarshal string into Go value of type []string的异常

cannot unmarshal string into Go value of type []string

要搞成String[]才行么?

alter table table drop partition [‘P20230203’]

试试…


这样是行不通的,我之前也试过,应该是tidb在进行sql解析时返回的异常

这个不太符合预期,
不过由于旧版 4.0.x 基本上已经不更新了,
如果条件允许,请辛苦升级到 6.5.0 看看该问题是否存在!

如果有 bug 大概率也是 JDBC 的兼容性问题,这个是基本功功能,我们再修复一下

通过对比不同版本tidb的抓包情况,发现在4.0.8下操作是正常的,而4.0.2的会出现这样的问题,通过查看发布历史,与partition相关的代码有变化,如果使用4.0.5之前的tidb和和4.0.5后的tikv就会导致unmarshal的现象,因此保持两者版本一致的话一般就没有问题了
image

请问这个 jdbc 的 5.2.8 是哪个版本, mysql connector/j 好像没有 5.2 的版本呢

抱歉,之前看错了,把spring的版本写过来了,5.2.8是spring的版本,mysql-connector-java的版本是8.0.21

我使用以下环境没有复现,请问你连接 tidb 有其他参数设置么

  • tidb v4.0.2
  • mysql-connector-java 8.0.21
  • mybatis 3.5.6

mybatis是3.5.10,应该不是其他参数的问题,我又试了一次,4.0.2的会出现如下异常
java.sql.SQLException: json: cannot unmarshal string into Go value of type []string
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:953)
at com.mysql.cj.jdbc.ClientPreparedStatement.execute(ClientPreparedStatement.java:370)

4.0.8的一切正常

image
看了一下mr的记录https://github.com/pingcap/tidb/pull/18930/files,partition name确实有修改,但不知道是否就是这个原因导致的

此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。