我在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的输出是噪声,有时是正确的音频。不是交织在一起的。
那么,我如何从多个行中提取并连接blobs到一个连贯的二进制输出文件中呢?
编辑:这是原始音频数据。要把它读到Audacity中,您可以转到导入->raw。
发布于 2014-12-28 19:40:37
SELECT INTO OUTFILE的主要目的是允许您将表快速转储到文本文件,并补充LOAD DATA INFILE。
我强烈怀疑SELECT到OUTFILE要么添加了ASCII NULL,要么在列之间添加了其他格式,以便可以读取它。
您可以比较二进制输出以确定这是否为真,还可以选择可能也存在的任何其他格式、编码或形状。
您必须使用OUTFILE吗?-您不能获得二进制数据并直接使用脚本或其他中间层来创建文件,而不是依赖数据库吗?
更新
写完这篇文章后,阅读下面的评论。我想到了CONCAT,MySQL将BLOB值视为二进制字符串(字节字符串),因此理论上,将多个列简单地串联成一个列可能有效。
如果没有,则无需编写简单的珍珠、PHP、C、bash或其他脚本语言来查询数据库、连接两个或多个二进制列并将输出写入系统上的文件。
发布于 2014-12-28 20:23:11
您需要的是从命令行运行mysql命令,使用-e传递要执行的sql语句,以及二进制输出的适当标志。
然后,使用带有空分隔符的group_concat连接所有数据。
最后,输出到您的文件。唯一需要注意的是group_concat上内置的限制,您可以在.ini文件中修改这个限制,或者设置一个全局变量。
下面是这样的情况:
-二进制模式-e“按日期、时间从音频顺序选择group_concat(数据分隔符‘);”-A -B -r -L -N YOUR_DATABASE_NAME > output
我只是在数据库中尝试了二进制数据(而不是音频),它可以工作。
https://stackoverflow.com/questions/27679779
复制相似问题