PostgreSQL中的unicode字符串是否允许通过Python使用空字节?

时间:2015-03-02 15:27:28

标签: python postgresql unicode

unicode字符串是否允许使用空字节?

我不会问utf8,我的意思是unicode字符串的高级对象表示。

背景

我们在PostgreSQL中通过Python存储包含空字节的unicode字符串。

如果再次读取字符串,则字符串会在空字节处剪切。

3 个答案:

答案 0 :(得分:6)

关于数据库方面,PostgreSQL本身不允许在char / text / varchar字段的字符串中使用空字节('\0'),因此如果您尝试存储包含它的字符串,则会收到错误。例如:

postgres=# SELECT convert_from('foo\000bar'::bytea, 'unicode');
ERROR:  22021: invalid byte sequence for encoding "UTF8": 0x00

如果您确实需要存储此类信息,则可以在PostgreSQL端使用bytea数据类型。确保正确编码。

答案 1 :(得分:1)

Python本身完全能够同时拥有字节字符串和Unicode字符串,其中空字符的值为零。但是,如果调用以C实现的库,则该库可以使用在第一个空字符处停止的C约定。

答案 2 :(得分:-2)

由于字符串基本上只是数据和指针,因此可以在其中保存null。但是,由于null表示字符串的结尾(“null终止符”),因此在读取之前不知道大小的情况下无法读取超出null的值。

因此,您似乎应该将数据存储为二进制文件并将其作为缓冲区读取。

祝你好运!