最近のプロジェクトでこれを簡単に試してみましたが、これが最善または最もクリーンなソリューションと見なされるべきではありません。また、これは純粋にユニットベースの統合テストに使用したことにも注意してください。理想的には、今後数週間でこれを 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();
}
}