Database 从数据库中获取大字符串

Database 从数据库中获取大字符串,database,postgresql,character-encoding,Database,Postgresql,Character Encoding,我的postgresql数据库中有一个大字符串。这是一个base64编码的mp3,我必须用那个大字符串来选择列,然后用一次选择来获取所有数据。如果我写正常选择 SELECT * FROM public.song_data WHERE id=1; 它将从该字符串返回204 kB,该字符串有2.2 MB 此外,datagrip仅显示该字符串中的204 kB数据。是否有一种方法只需一次选择即可获得所有数据?您可以使用带有负值的left和concat来选择要显示的字符数: SELECT left(co

我的postgresql数据库中有一个大字符串。这是一个base64编码的mp3,我必须用那个大字符串来选择列,然后用一次选择来获取所有数据。如果我写正常选择

SELECT * FROM public.song_data WHERE id=1;
它将从该字符串返回204 kB,该字符串有2.2 MB


此外,datagrip仅显示该字符串中的204 kB数据。是否有一种方法只需一次选择即可获得所有数据?

您可以使用带有负值的
left
concat来选择要显示的字符数:

SELECT left(concat(public.song_data,' '), -1) from mytable;

真奇怪。你确定你的数据没有被删除吗?您可以使用函数
length
检查实际尺寸

postgres=# select length('aaa');
┌────────┐
│ length │
╞════════╡
│      3 │
└────────┘
(1 row)
两MB对于Postgres来说不算什么,但是一些客户端(或协议)可能会遇到问题。有时需要使用函数
lou import
lou export
作为客户端/协议限制的解决方法。要从表中选择数据,您应该使用
SELECT
语句。没有别的办法。理论上,您可以将任何字符串转换为大对象,然后通过函数
lo_export
可以使用lo特殊协议从数据库下载此大对象。对于2MB,我认为应该没有必要

请尝试检查您的数据是否正确存储到postgres。文本的理论限制,varchar是1GB。实际限制值较小-约100MB。它的值明显高于2MB


Postgres对二进制数据有特殊的数据类型-
bytea
。默认情况下,它与十六进制代码进行对话,并且还支持base64编码。

客户机实际上就是问题所在。Datagrip无法打印2MB的数据。我尝试了另一个客户机(DBeaver和Heidisql),一切正常。然后我用一个php select选择了一行2MB,我得到了所有的数据。

尝试从public.song_数据中选择长度(bytea_列),其中id=1
。如果是2.2MB,那么您的客户机没有显示全部内容。如果较短,则表示存储值时出现问题。您确定datagrip没有出于性能原因而切断长字符串吗?