У меня есть строка UTF с символом \0 и текстовым полем в таблице sqlite.
Когда я попытался вставить строку в текстовое поле таблицы, а затем прочитать ее из базы данных, я заметил, что строковое значение усекается после символа \0.
Вопрос: возможно ли сохранить/восстановить такие строки в sqlite без потери данных после \0?
Фрагмент кода:
public static void IssueWith0Character()
{
const string sql = "DROP TABLE IF EXISTS SomeTable;" +
"CREATE TABLE SomeTable (SomeField TEXT not null);"
+ "INSERT INTO SomeTable (SomeField) Values ( :value )";
var csb = new SQLiteConnectionStringBuilder
{DataSource = "stringWithNull.db", Version = 3};
// string with '0' character
const string stringWithNull = "beforeNull\0afterNull";
using (var c = new SQLiteConnection(csb.ConnectionString))
{
c.Open();
using (var cmd = c.CreateCommand())
{
var p = new SQLiteParameter(":value", DbType.String) {Value = stringWithNull};
cmd.CommandText = sql;
cmd.Parameters.Add(p);
cmd.ExecuteNonQuery();
}
using (var cmd = c.CreateCommand())
{
cmd.CommandText = "SELECT SomeField FROM SomeTable;";
var restoredValue = (string) cmd.ExecuteScalar();
Debug.Assert(stringWithNull == restoredValue);
}
}
}
ОБНОВЛЕНИЕ №1 Похоже, проблема на этапе чтения. В файле базы данных существует по крайней мере "afterNull" часть строки.
ОБНОВЛЕНИЕ № 2 Это считалось ошибкой System.Data.SQLite (‹1.04.84). http://system.data.sqlite.org/index.html/tktview/3567020edf12d438cb7cf757b774ff3a04dc381e
BLOB
. - person Joachim Isaksson   schedule 05.03.2013