概要
PostgreSQLでbytea型からvarchar型にキャストを行った際に結果が異なる現象が起きたためメモします。
後ほど詳しく調査します。
環境
バージョン確認
SELECT version();
環境1
- CentOS7にyumでインストール
version |
---|
PostgreSQL 9.6.8 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-16), 64-bit |
環境2
- Dockerの公式イメージ(https://hub.docker.com/_/postgres/ の 9-alpine)
version |
---|
PostgreSQL 9.6.9 on x86_64-pc-linux-musl, compiled by gcc (Alpine 6.4.0) 6.4.0, 64-bit |
事象
キャスト検証
SELECT '1'::bytea::VARCHAR;
環境1での結果
varchar |
---|
1 |
環境2での結果
varchar |
---|
\x31 |
環境2での暫定対応
エスケープで暫定対応
SELECT encode('1' ::bytea, 'escape')::VARCHAR;
varchar |
---|
1 |
ただしASCIIで表現できない文字が入ると駄目。。。