Я пытаюсь создать запись, содержащую путь к файлу. Вставка выполняется в базу данных Postgres
, где разрешен UTF8 с использованием драйвера NpqSQL
.NpgSQL вставить путь к файлу, содержащий обратную косую черту «\»
Мое определение таблицы:
CREATE TABLE images
(
id serial,
file_location character varying NOT NULL
)
My 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 вставить вышеуказанное заявление, он отлично работает. Использование водителя NpgSQL через Visual Studio C#, он терпит неудачу с этим исключением:
"ERROR: 22021: invalid byte sequence for encoding \"UTF8\": 0x81"
Как Милены точно объясняет, Postgres интерпретирует высказывание как octal
числа (\ o201 == 0x81).
Как Milen также описывает, что E
infront пути не помогает.
Итак, краткое описание: Почему NpqSQL останавливает мою установку \\2010
?
Вы читали «4.1.2.1 Строковые константы.» И «4.1.2.2 Строковые константы с C-Style Escapes.» из руководства (http://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-CONSTANTS)? –
@Milen: «Любой другой символ, следующий за обратной косой чертой, берется буквально. Таким образом, чтобы включить символ обратной косой черты, напишите две обратные косые черты (\\\)». Моя логика говорит мне, что «\\» рассматривается до значения восьмеричного байта «\ 2 ...»? – Chau
Вы не указали реальный код, поэтому я предполагаю, что ваш интерпретатор/компилятор интерпретирует двойную обратную косую черту как скрытую обратную косую черту, а затем Postgres видит только одну обратную косую черту, а затем некоторые цифры. Который интерпретируется как восьмеричное число (o201, x81). –