gpt4 book ai didi

mysql - 将用于表创建的 DDL 从 MySQL 转换为 H2

转载 作者:行者123 更新时间:2023-11-29 01:03:51 26 4
gpt4 key购买 nike

我正在尝试使用内存中的 H2 数据库设置一些单元/集成测试,整个过程都与 Spring 连接在一起。这适用于在开发和生产中使用 MySQL 的现有应用。

现在,我需要一个 DDL SQL 脚本来在 H2 中创建我的数据库结构。我可以轻松地从 MySQL 导出 DDL 语句。但我不知道语法上的差异是什么 - 至少我很确定 engine=InnoDB 之类的东西必须去。

是否还有其他我应该注意的语法差异?

有没有工具可以自动将de DDL语句从MySQL语法翻译成H2语法?

最佳答案

我在最近的一个项目中快速解决了这个问题,这绝对不应该被视为最好或最干净的解决方案。还应该注意的是,我将其纯粹用于基于单元的集成测试。理想情况下,我会在接下来的几周内在 github 上发布它,以便人们可以添加它,但同时它可能会有所帮助。 Java 中的解决方案:

/**
* Designed to go through MySQL schema produced from forward engineering tools and normalize slightly to
* work with H2 for testing. This only works on the SQL constructs themselves and is not able to
* detect errors such as constraints with the same name.
*
* Assumptions
* - INDEX is created separately from main SQL body
* - Incompatible key words such as order are not used
* - Assumes the name of a constraint is not duplicated
* @author jpgough
*
*/
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;

public class MySqlToH2 {
public static String convert(String filePath) throws IOException {
String[] rawSQL = new String(Files.readAllBytes(Paths.get(filePath))).split("\\n");
StringBuilder builder = new StringBuilder();

for(String line : rawSQL) {
if(line.contains("SET")) {
continue;
} else if(line.contains("INDEX")) {
continue;
} else if(line.contains("IF NOT EXISTS")) {
line = line.replaceAll("IF NOT EXISTS", "");
} else if(line.contains("--")) {
continue;
} else if(line.contains("ENGINE")) {
line = ";";
}

line = line.replace("`", "");
builder.append(line).append("\n");
}
return builder.toString();
}
}

关于mysql - 将用于表创建的 DDL 从 MySQL 转换为 H2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14963138/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com