我有与此类似的观点
CREATE OR REPLACE VIEW regexp_test AS (
SELECT regexp_matches(decode('NTB4', 'base64')::text, '(\d+)x')
)
当我从 pgAdmin 查询视图时,按预期返回单个值为 50 的数组。
SELECT * FROM regexp_test
但是当我通过 PHP 从 PHP 中调用完全相同的查询时pg_query('SELECT * FROM regexp_test')
,没有返回任何内容。
postgres 版本 9.5.3,
php 版本 7.0.3(与 5.6.14 的结果相同)
PHP 代码非常简单:
<?php
$link = pg_connect('host=localhost port=5432 dbname=test user=postgres password=postgres');
$qry = "SELECT * FROM regexp_test";
$res = pg_query($link, $qry);
while ($row = pg_fetch_row($res)) {
print_r($row);
}
相同的查询
select e'\\x353078'::bytea;
给出不同格式的结果psql:
bytea
----------
\x353078
and in PgAdmin III:
bytea
----------
50x
对于文档: https://www.postgresql.org/docs/current/static/datatype-binary.html
bytea 类型支持两种外部输入和输出格式:PostgreSQL 的历史“转义”格式和“十六进制”格式。输入时始终接受这两者。输出格式取决于配置参数bytea_output
;默认为十六进制。 (请注意,十六进制格式是在 PostgreSQL 9.0 中引入的;早期版本和某些工具不理解它。)
PgAdmin III(以及 PgAdmin4)可能由于历史原因设置了bytea_output
to escape
而参数的默认值为hex
。这可能会导致混乱(正如您所看到的那样)。看来 pgAdmin 不应该更改参数的默认值。
您可以更改应用程序中的参数以获得与 PgAdmin 中相同的行为:
set bytea_output to escape;
当然,使用encode()
也是一个很好的解决方案。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)