我正在使用 Scriptella 进行数据库迁移。 将longblob字段从表A复制到表B的最佳方法是什么?
当我这样做这个工作时:
<query ...
SELECT FL_DATA as data FROM A where FL_DATA IS NOT NULL
<script ...>
INSERT B (FL_DATA) VALUES ('$data');
</script>
</query>
那么它只会将'BLOB:java.io.IOException:内容太长而无法放入内存'写入目标字段(顺便说一下:longblob的大小只有几KB)。
答案 0 :(得分:0)
使用$ variable语法时,只需将变量的文本值插入到语句的文本中。建议的方法是使用预准备语句语法。在这种情况下,值将与SQL语句分开传输。请尝试以下方法:
<query ...
SELECT FL_DATA as data FROM A where FL_DATA IS NOT NULL
<script ...>
INSERT B (FL_DATA) VALUES (?data);
</script>
</query>
答案 1 :(得分:0)
对不起,这不是答案,但我不知道如何评论ejboy的答案。
Ejboy,它对我不起作用。我已经尝试过准备好的陈述(在我的情况下)?描述和?2。我尝试在控制台上显示内容时遇到的同样错误:<query connection-id="database">
SELECT id, description FROM table;
<script connection-id="copy_database">
INSERT INTO table VALUES (?1, ?2);
</script>
<script connection-id="text">
$id, $description
</script>
</query>
对于显示和插入(这里显示示例),我得到了相同的错误:
BRA0735401, CLOB: java.io.IOException: Content too long to fit in memory
我的主要任务是从一个数据库复制到另一个数据库。就像Jan的情况一样,blob / clob内容大约是40 kB(键/值列表,每个都在单独的行中,从数据库的角度来看这是MySQL MEDIUMTEXT)。我知道,可以插入一个blob / clob从一个文件(带有mp3文件的scriptella示例),并且可以将blob的内容写入文件(带有odbc和带有janino的图片的scriptella示例),所以我将尝试使用带有临时文件的解决方案,但它是不是一个美丽的解决方我是对的吗?
有没有更简单的解决方案?
此致 亚切克