postgresql的二進位制資料型別為bytea,可最多儲存2g的資料。在ado、odbc等介面,可通過帶引數化的插入sql語句上傳二進位制。
然而在某些介面、sql語句無法進行引數繫結,或者某些語言沒有二進位制的型別,或者介面的不相容等原因,常無法上傳二進位制資料。
碰到這種情況下,必須在客戶端將二進位制轉化為一定規則的字串行,然後插入語句時,來個顯示轉換
cast('字串行' as bytea).
二進位制轉化為字串行的規則:
分析每個位元組,當其ascii值在0到31,127到255,或為39、92,請將這位元組轉化為3位的八進位制字串,前面加上2個反斜槓,如chr(39)表示為\\\\047. 其他ascii值為可顯示字元,不變,當然你也可全部轉化為八進位制,但這樣整個字串太長,浪費空間。
如二進位制序列 chr(0)+'a'+'b'+chr(233)+chr(25)+'c'轉化為字串行為:
\\\\000ab\\\\351\\\\031c
上傳的時候再來個顯示轉換,如 insert into table1 (aa) values (cast('\\\\000ab\\\\351\\\\031c' as bytea))
如果二進位制資料太大,可分次上傳,用||連線符連線起來,如:
insert into table1 (id,aa) values (1,cast('序列1' as bytea))
update table1 set aa=aa||cast('序列2' as bytea) where id=1
...
如果postgresql為9.0以上, 可用 hex格式, 字串前面加0x
如chr(255)+chr(0)+chr(254) 可轉化為 '0x ff00fe'
PostgreSQL如何匯入SJIS字符集的檔案
磨礪技術珠磯,踐行資料之道,追求卓越價值 回到上一級頁面 postgresql雜記頁 回到頂級頁面 postgresql索引頁 作者 高健 luckyjackgao gmail.com 外部檔案來自於windows,日語sjis字符集。由於sjis字符集和標準的posix有衝突,故linux平台一般...
如何更新Postgresql的Jsonb陣列
假設你決定將資料以json或者jsonb的形式儲存在資料庫中,然後發現你剛剛給自己製造了新的問題,而這些問題是以前沒有的。jsonb是乙個強大的工具,但它也有一定的代價,因為你需要調整查詢和處理資料的方式。而且將整個jsonb物件載入到記憶體中,用你喜歡的程式語言進行轉換,然後將其儲存回資料庫,這並...
PostgreSQL陣列如何去除交集
postgresql中支援多種型別的資料型別,其中陣列型別在pg中也是被頻繁使用的一種,我們可以定義某列為變長多維陣列。那麼對於不同陣列我們怎麼獲取陣列的交集,進行去除交集等操作呢?對於字串,我們可以使用except來直接進行去除交集,那麼陣列該怎麼辦呢?對於陣列的去除交集我們的思路大致為 1 先把...