mysqldump的sql内容在TiDB执行报错

【 TiDB 使用环境】 测试
【 TiDB 版本】v7.1.0
【问题】使用mysqldump从MySQL中导出的SQL,直接在tidb里面执行会报错,原因是对于注释类的SQL在TiDB里面不会忽略,如下:

/!50717 SELECT COUNT() INTO @rocksdb_has_p_s_session_variables FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = ‘performance_schema’ AND TABLE_NAME = ‘session_variables’ */

1064 - You have an error in your SQL syntax; check the manual that corresponds to your TiDB version for the right syntax to use line 1 column 64 near “@rocksdb_has_p_s_session_variables FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = ‘performance_schema’ AND TABLE_NAME = ‘session_variables’ */”

是否有设置可以忽略这种注释。

在MySQL里面这种注释也不会被忽略,可以自己测一下。

tidb的行为和mysql基本一致,略微有点不同,文档上写的比较清晰了:
https://docs.pingcap.com/zh/tidb/stable/comment-syntax

这种SQL拿到MySQL上是可以执行的,因为通过mysqldump导出来是很多的这种注释的,直接在mysql是可以执行的,但是在tidb是会报错,所以就会觉得是不是哪里有什么参数设置去忽略他

关注到的时候,这种注释后面会有一个分号,就是这个分号会导致tidb报错语法错误,但是在mysql执行是没问题

不支持吧。。

这个问题的关键是你所谓的注释里面的sql语法tidb不支持。

SELECT COUNT(*) INTO @rocksdb_has_p_s_session_variables FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'performance_schema' AND TABLE_NAME = 'session_variables'

/*!50717 这个不是一般的注释。里面的数字是版本号,大于这个版本的会执行的。
MySQL和tidb里面都是这样

tidb报错是因为select into语法,和注释没关系

说个简单的办法 ,导出加上参数 --skip-comments 就没注释了。。

批量改下版本号呢?

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