Postgresql不接受UTF字符串中的\0,而C#接受
我有一些数据,其中包含一个Postgresql不接受UTF字符串中的\0,而C#接受,c#,postgresql,utf-8,C#,Postgresql,Utf 8,我有一些数据,其中包含一个\0字节,这似乎是有效的UTF8数据: using System; using System.Text; public class Program { public static void Main() { byte[] b = new byte[3]; b[0] = 65; b[1] = 66; b[2] = 0;
\0
字节,这似乎是有效的UTF8数据:
using System;
using System.Text;
public class Program
{
public static void Main()
{
byte[] b = new byte[3];
b[0] = 65;
b[1] = 66;
b[2] = 0;
Console.WriteLine(Encoding.UTF8.GetString(b));
}
}
那个密码。但是,当试图更新Postgres中的记录时,它会抱怨:
22021:编码“UTF8”的字节序列无效:0x00
数据不应该存在,但一个系统接受数据,而另一个系统不接受数据,这怎么可能呢?我想他们都执行标准。来自文档
这些数据类型中可以存储的字符由数据库字符集决定,数据库字符集在创建数据库时选择无论特定字符集如何,都无法存储代码为零的字符(有时称为NUL)。有关更多信息,请参阅第23.3节
谢谢,但是结果消息有点混乱。代码点似乎无效,但并非不允许。此外,对于某些背景,请阅读以下内容:
+-----------------------------------+----------------------------+
| Name | Description |
+-----------------------------------+----------------------------+
| character varying(n), varchar(n) | variable-length with limit |
| character(n), char(n) | fixed-length, blank padded |
| text | variable unlimited length |
+-----------------------------------+----------------------------+