我想創建一個包含文件路徑的記錄。使用NpqSQL
驅動程序將插入完成到啓用UTF8的Postgres
數據庫中。NpgSQL插入文件路徑包含反斜槓「\」
我的表定義:
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"
由於米倫準確地解釋說,Postgres的解釋語句作爲一個octal
號(\ O201 == 0×81)。
由於米倫也描述,E
面前的道路並沒有幫助。
所以快速回顧一下:爲什麼NpqSQL會停止插入\\2010
?
你讀過「4.1.2.1字符串常量」和「4.1.2.2與C風格的逃逸字符串常量。」從手冊(http://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-CONSTANTS)? – 2010-03-22 18:32:54
@Milen:「反斜槓後面的任何其他字符都是字面意義的,因此,要包含反斜槓字符,請寫兩個反斜槓(\\\)。」我的邏輯告訴我,'\\'是在八進制字節值'\ 2 ...'之前考慮的? – Chau 2010-03-23 15:05:19
你還沒有展示真實的代碼,所以我想你的解釋器/編譯器將雙反斜線解釋爲一個轉義反斜線,然後Postgres只看到一個反斜槓後面跟着一些數字。它被解釋爲八進制數(o201,x81)。 – 2010-03-23 15:32:12