如何避免参数化SQL查询中的无效UTF8字节序列?

时间:2016-09-15 17:18:40

标签: c# postgresql encoding utf-8

我有一个使用UTF8编码的PostgreSQL数据库。我相信这是默认编码。

我有一个GUI应用程序,它发出典型的SELECT查询,并带有WHERE子句。查询是参数化的,参数的内容通常由最终用户粘贴。该值不会从文本文件等中读取 - 它会粘贴到备忘录编辑中。

这是查询...

cmd.CommandText = @"SELECT history_id, emplid, displayname
                    FROM ""MAX_HISTORY_IDS""
                    WHERE searchname ILIKE :searchname";

cmd.Parameters.Add("searchname", PgSqlType.VarChar).Value = "Sievert,Jürgen";

在上面的代码中,参数值Sievert,Jürgen将是从备忘录编辑框或文本输入等解析出来的变量。该名称也是导致此查询的名称的真实示例从Postgre中导致无效的UTF8字节序列错误。

现在,我假设数据库上的UTF8编码很好,并且非常适合这种内容。这里有什么问题?这个文本参数的编码不是UTF8吗?如何使此查询起作用,或者数据库上的编码是否不合适?

1 个答案:

答案 0 :(得分:1)

我明白了。我正在使用DotConnect PostgreSQL客户端库。在连接字符串中,我只需要添加Unicode=True。这似乎使一切正常。