我有一个带有MEDIUMBLOB字段中音频数据的mysql数据库表。问题是,一个音频文件位于不同的行中。所以我想加入他们。当我这样做时:
select data from audio where id=1 into outfile "output" fields escaped by '';
..我收到了音频。当我为id = 2做同样的事情时,我得到音频。当我把它们放在一起时:
select data from audio order by date, time into outfile "output" fields escaped by '';
..我听了一段时间的音频,然后是高幅度的噪音。噪音从id = 2的地方开始。如果我选择两个以上的列放在一起,有时该特定id的输出是噪声,有时它是正确的音频。它并不是完全交错的。
那么,如何从多行中提取和连接blob到一个连贯的二进制输出文件中呢?
编辑:这是原始音频数据。例如。要将其读入Audacity,您将进入import-> raw。
答案 0 :(得分:1)
SELECT INTO OUTFILE
主要是为了让您快速将表格转储到文本文件,并补充LOAD DATA INFILE
。
我强烈怀疑SELECT INTO OUTFILE是在列之间添加ASCII NULL还是其他格式化,以便可以回读它。
您可以比较二进制输出以确定是否为真,并且还可以选择可能存在的任何其他格式,编码或整形。
你必须使用INTO OUTFILE吗? - 您是否可以直接使用脚本或其他中间层来获取二进制数据并创建文件,而不是依赖于数据库?
<强>更新强>
写完之后,阅读下面的评论。我想到了CONCAT
,MySQL将BLOB值视为二进制字符串(字节字符串),因此理论上可以将多个列简单地连接成一个单独的列。
如果它没有,那么编写一个简单的珍珠,PHP,C,bash或其他脚本语言来查询数据库,加入两个或多个二进制列并将输出写入系统上的文件。
答案 1 :(得分:1)
你需要的是从命令行运行mysql命令,使用-e传递一个sql语句来执行,以及二进制输出的相应标志。
然后使用group_concat和空分隔符来连接所有数据。
最后,输出到您的文件。您唯一需要注意的是group_concat的内置限制,您可以在.ini文件中更改,或者通过设置全局变量。
这看起来如何:
mysql --binary-mode -e&#34;从日期,时间的音频顺序中选择group_concat(数据分隔符&#39;&#39;);&#34; -A -B -r -L -N YOUR_DATABASE_NAME&gt;输出
我只是在数据库中使用二进制数据(而不是音频)尝试它并且它可以工作。