作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试创建一个包含文件路径的记录。使用 NpqSQL
驱动程序插入启用 UTF8 的 Postgres
数据库。
我的表格定义:
CREATE TABLE images
(
id serial,
file_location character varying NOT NULL
)
我的 SQL 语句包括执行它的代码(归结为最少):
string sqlStatement = "INSERT INTO images (file_location) VALUES ('\\2010')";
NpgsqlConnection dbConnection = new NpgsqlConnection(connectionString);
dbConnection.Open();
NpgsqlCommand dbCommand = new NpgsqlCommand(sqlStatement , dbConnection);
int result = dbCommand.ExecuteNonQuery();
dbConnection.Close();
当使用pgAdmin 插入上面的语句时,它工作正常。通过 Visual Studio C# 使用 NpgSQL 驱动程序,失败并出现以下异常:
"ERROR: 22021: invalid byte sequence for encoding \"UTF8\": 0x81"
正如 Milen 准确解释的那样,Postgres 将该语句解释为一个八进制
数字 (\o201 == 0x81)。
正如 Milen 也描述的那样,路径前面的 E
没有帮助。
快速回顾一下:为什么 NpqSQL 会阻止我插入 \\2010
?
最佳答案
(意识到我的评论看起来像一个答案,所以相应地转换了它们。)
你没有显示真正的代码,所以我想你的解释器/编译器将双反斜杠解释为转义的反斜杠,然后 Postgres 只看到一个反斜杠后跟一些数字。它解释为八进制字节值(八进制 201 = 十六进制 81)。
关于“转义”字符串常量(以“E”开头的字符串)- 在您的情况下,它们是完全不必要的。在标准 SQL 中,反斜杠没有特殊含义。
有关详细信息,请阅读手册(http://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-CONSTANTS)中的“4.1.2.1. 字符串常量”和“4.1.2.2. 带有 C 样式转义符的字符串常量”。
关于c# - NpgSQL 插入包含反斜杠的文件路径 "\\",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2493521/
我是一名优秀的程序员,十分优秀!