Java 即使脚本在DB客户端(MySQL)中运行正常,Flyway迁移也会失败

Java 即使脚本在DB客户端(MySQL)中运行正常,Flyway迁移也会失败,java,mysql,flyway,Java,Mysql,Flyway,我正在进行flyway迁移,将一个表的内容作为JSON字符串写入另一个表的字段中。我试图去掉大约50个表,并用包含JSON字符串的字段替换它们 我遇到的问题是,当我在MySQL Workbench中运行查询时,查询运行良好,但当我运行flyway迁移时,查询失败。我已尝试修改查询。运行一个非常简单的存储过程是可行的。运行select on INFORMATION_SCHEMA.COLUMNS也可以正常工作。我尝试过使用SET@qry:=()编写查询,但没有任何区别。我很想知道如何解决这个问题 M

我正在进行flyway迁移,将一个表的内容作为JSON字符串写入另一个表的字段中。我试图去掉大约50个表,并用包含JSON字符串的字段替换它们

我遇到的问题是,当我在MySQL Workbench中运行查询时,查询运行良好,但当我运行flyway迁移时,查询失败。我已尝试修改查询。运行一个非常简单的存储过程是可行的。运行select on INFORMATION_SCHEMA.COLUMNS也可以正常工作。我尝试过使用SET@qry:=()编写查询,但没有任何区别。我很想知道如何解决这个问题

MySQLSyntaxErrorException: You have an error in your SQL syntax; 
check the manual that corresponds to your MySQL server version 
for the right syntax to use near 'PREPARE stmt FROM @qry;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
--    =========' at line 13
这就是问题所在

SET GLOBAL group_concat_max_len = (10*1024);
SET GLOBAL max_allowed_packet = (50*1024*1024);
SET @schema = 'db';

SET @table = 'InterfaceTable';
SET @className = 'TestInterfaceConfing';
SET @interfaceType = 'Test';

SELECT CONCAT(
  'UPDATE TestTable as tt SET interfaceConfig=(SELECT CONCAT(TRIM(TRAILING ', QUOTE(','),
  ' FROM CONCAT(', QUOTE('{"@class":"'), ',', QUOTE(@className), ',', QUOTE('",'), ',',
  GROUP_CONCAT(QUOTE('"'), ',', QUOTE(COLUMN_NAME), ',', QUOTE('"'), ',', QUOTE(':'), ',',
  IF(type like '%CHAR', '\'"\',', ''), 'IF(', COLUMN_NAME, ' is null,', IF(type like '%CHAR', '\'\'', QUOTE('null')) , ',', COLUMN_NAME, ')', IF(type like '%CHAR', ',\'"\'', ''), ',', QUOTE(',')),
  ')), ''}'') FROM ', @table, ' as interface WHERE tt.id=interface.id) where tt.interfaceType=', QUOTE(@interfaceType), ';'
)
INTO @qry
FROM
  (SELECT COLUMN_NAME, DATA_TYPE as type FROM INFORMATION_SCHEMA.COLUMNS c
  WHERE TABLE_SCHEMA = @schema AND TABLE_NAME = @table) t;

PREPARE stmt FROM @qry;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

这几乎可以肯定是因为我们的解析器被许多引号组合绊倒了。请在issue tracker中提交一个问题,并包含最简单的中断查询形式。

这几乎可以肯定是由于我们的解析器在许多引号组合中出错。请在问题跟踪器中提交问题,并包括最简单的中断查询形式。

我使用
com.googlecode.flyway:flyway核心版本:2.1.1


我不得不将我的1个长脚本分成13个脚本的一部分。

我使用
com.googlecode.flyway:flyway核心版本:2.1.1


我不得不将我的1个长脚本分成13个脚本的一部分。

似乎
MySQLSyntaxErrorException
来自MySQL驱动程序,因此值得从等式中删除Flyway。您可以尝试创建一个数据库连接,并运行查询,以确定驱动程序是否能够逐字运行该查询。似乎
MySQLSyntaxErrorException
出自MySQL驱动程序,因此值得从等式中删除Flyway。您可以尝试创建一个为您提供数据库连接的驱动程序,并运行查询以确定驱动程序是否能够逐字运行该查询。