簡體   English   中英

在mysql中從Blob連接二進制數據

[英]Joining binary data from blobs in mysql

我在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。

SELECT INTO OUTFILE主要用於使您快速將表轉儲到文本文件,並補充LOAD DATA INFILE

我強烈懷疑SELECT INTO OUTFILE是在列之間添加ASCII NULL還是其他格式,以便可以將其讀回。

您可以比較二進制輸出以確定這是否正確,還可以選擇其他可能存在的其他格式,編碼或整形。

您必須使用INTO OUTFILE嗎? -是否不能直接使用腳本或其他中間層而不是依賴數據庫來獲取二進制數據並創建文件?

更新資料

編寫完之后,並閱讀下面的評論。 我想到了CONCAT ,MySQL將BLOB值視為二進制字符串(字節字符串),因此從理論上講,將多個列簡單連接成一個即可。

如果不是這樣,那么編寫簡單的Pearl,PHP,C,bash或其他腳本語言來查詢數據庫,聯接兩個或更多二進制列並將輸出寫入系統上的文件就不會花費太多。

您需要從命令行運行mysql命令,使用-e傳遞要執行的sql語句以及二進制輸出的相應標志。

然后,使用帶空分隔符的group_concat合並所有數據。

最后,輸出到文件。 您唯一需要了解的是group_concat的內置限制,您可以在.ini文件中更改該限制,也可以通過設置全局變量來更改該限制。

這是什么樣子:

“ mysql --binary-mode -e”按日期,時間從音頻順序中選擇group_concat(數據分隔符); -A -B -r -L -N YOUR_DATABASE_NAME>輸出

我只是用二進制數據(不是音頻)在數據庫中嘗試過,它可以工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM