【IT168 服務器學院】今天看了MySQL的文檔,也看了一些網上的文章,了解到了二進制數據在MYSQL中是如何處理的,許多例子是用在圖像數據的存取中,偏偏我要存取的不是圖像數據,不過也沒有關系,反正都是二進制數據,沒有區別.
我現在總結一下在LINUX下如何用C存取二進制數據.
如果是插入二進制數據,你能有如下的步驟:
1,定義一個緩沖區char buf[EB] (What EB? Enought Big,hehe~~~)
2,把標準的SQL語句用sprintf或strcpy之類的函數填入,直到插入二進制的地方.在下面一步插入二進制.
3,用某種方法讀取二進制數據到tmpbuf[SIZE];
例如:要插入的是圖像文件數據,用fread(tmpbuf, 1, sizeof(tmpbuf), filestream),然后用
mysql_real_escape_string()函數將buf繼續填滿(注意應在第2步中填入的字串的結束字符''開始填起,即不要有''),這個函數的原型為:
unsigned long mysql_real_escape_string(MYSQL *mysql, char *to, const char *from, unsigned long length)
其中mysql指針是有效的,已經連接成功的句柄,換句話說mysql必須是成功執行mysql_real_connect()函數返回的句柄.
如果你看到了mysql_escape_string這種函數,那請不要使用它,它已經快被廢除了.
4,若還有要插入的數據,繼續2,3步.
5,然后加上余下的SQL語言構成完整的SQL語言.
6,最后你可以用mysql_real_query()來執行SQL語言了,其原型如下:
int mysql_real_query(MYSQL *mysql, const char *query, unsigned long length)
注意:有一個要點要注意,因為二進制數據包括了許多的0或等等之類的字符,在字符串中有可能被解釋成其他的意思,所以我們用了上面mysql_real_escape_string()函數來拷貝數據,所以我們必須有變量能記錄查詢字串buf[EB]的首尾位置,這樣我們才能知道到底查詢字串有多長,在最后把該長度傳遞給mysql_real_query函數的最后一個參數.
如果是查詢到二進制的數據,那也很容易,我就隨便說幾個要點:
1,構造查詢字串.
2,執行mysql_real_query查詢.
3,用mysql_store_result存儲結果.
4,用mysql_fetch_row取出一條記錄處理.
如果取出來的是二進制的數據,要確定它的長度,必須要用mysql_fetch_lengths函數取得其長度.
沒有示例程序代碼,要是真覺得一定要有的話再找個日子寫寫吧.