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

本文关键字:无效 UTF8 字节 参数 查询 SQL | 更新日期: 2023-09-27 18:07:18

我有一个使用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将是一个从备忘录编辑框或文本输入等中解析出来的变量。这个名字也是一个真实的例子,一个名字导致这个查询结果无效的UTF8字节序列错误,来自Postgre。

现在,我假设数据库上的UTF8编码很好,并且是这类内容的标准编码。这是怎么了?这个文本参数的编码不是UTF8吗?我怎样才能使这个查询工作,或者是数据库上的编码不合适?

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

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