Postgresql
使用 PostgreSQL 8.4,如何將 bytea 轉換為 postgres 中的文本值?
在我的應用程序中,我使用 C 程式碼在數據庫中插入數據,因為我從不受信任的來源收到的字元串我已經使用
PQescapeByteaConn
libpq 庫對它們進行了轉義。這工作得很好,即產生八位字節格式的字元串。見下面的例子,輸入字元串:
\n\t\f\b\p\k\j\l\mestPrepared
輸出字元串:
\\012\\011\\014\\010pkjlmestPrepared
輸出字元串被插入到數據庫中。現在,我使用 JDBC 以 java 程式碼從數據庫中檢索該數據。如何將字元串轉義回其原始值?
我想到了兩種可能的方法,
- 更改數據庫檢索查詢並將此欄位傳遞給 postgres 的任何字元串操作函式,即可以將 bytea 轉換為文本。
- 在 Java 程式碼中進行解碼。
我可以理解方法1會更有效。我已經嘗試了這裡列出的幾乎所有功能,但沒有任何效果。請幫忙!!
我在 linux 機器上使用 8.4 版的 postgres。
對於追隨者,因為這似乎是“將 bytea 轉換為文本”的規範問題(即,您實際上可以在 pgAdmin 等中看到它)。以下是如何讓它可見(假設
your_column_name
是 typebytea
)
select encode(table.your_column_name, 'escape') as your_alias_name from table_name
您是否嘗試過
encode(data bytea, format text)
withescape
格式。在該語法format
中可以是其中任何一個,
- base64
- 十六進制
- 逃脫
所以
encode(E'123\\000456'::bytea, 'hex')
會將 bytea 輸出為十六進制編碼。