Postgresql 是否可以在postgres文本列中存储无效的UTF-8字节序列?

Postgresql 是否可以在postgres文本列中存储无效的UTF-8字节序列?,postgresql,unicode,utf-8,character-encoding,Postgresql,Unicode,Utf 8,Character Encoding,我的postgres数据库的编码是UTF-8。在某个表中,我有一列,我想在其中插入一些数据。现在,数据大部分是有效的UTF-8,但是有许多无效字节序列的实例,我不想删除或替换它们。我的问题是,有没有办法在不删除或替换无效字节序列的情况下将数据插入text列 下面是一个简单的示例,由以下人员从shell(bash)命令行执行: psqlmainpostgres如果要存储无效编码的数据,请使用bytea。正如mu所提到的,您必须处理这样一个事实,即子字符串和长度等现在是面向字节的,而不是面向字符的

我的postgres数据库的编码是UTF-8。在某个表中,我有一列,我想在其中插入一些数据。现在,数据大部分是有效的UTF-8,但是有许多无效字节序列的实例,我不想删除或替换它们。我的问题是,有没有办法在不删除或替换无效字节序列的情况下将数据插入
text

下面是一个简单的示例,由以下人员从shell(bash)命令行执行:


psqlmainpostgres如果要存储无效编码的数据,请使用
bytea
。正如mu所提到的,您必须处理这样一个事实,即子字符串和长度等现在是面向字节的,而不是面向字符的

对文本进行无效编码是一个问题。
left(n)
如何知道要抓取多少个字符?索引如何确定正确的词汇排序顺序?等等。更不用说,如果表中的数据编码错误,PostgreSQL无法进行即时字符编码转换(例如
客户端编码='latin-1'


您似乎需要某种宽松或宽容的编码模式,如果数据在当前编码中无效,它会返回到基于字节的解释,或者用
或其他东西替换它。这是一个合理的要求,但PostgreSQL不支持。

AFAIK
text
始终有一个编码(否则数据库将不知道如何将字节转换为字符,尤其是使用可变长度编码,如UTF-8)。如果只有一个字节流,那么就有
bytea
数据,而不是
text
。当然,像
length
这样的事情会有不同的效果(例如,比较
length('µ')
length('µ'::bytea)
),所以你只能选择你想承受的痛苦。不知道为什么会有人投反对票?
psql main postgres <<<"create table t1 (a text); insert into t1 (a) values (E'a\xC0b');";
## CREATE TABLE
## ERROR:  invalid byte sequence for encoding "UTF8": 0xc0 0x62