Я принимаю неструктурированный текст различных документов из разных источников. Я использую Sql Server Compact Edition 3.5.
Я создаю таблицу поиска с уникальными словами и ссылаюсь на них через идентификатор в качестве столбца идентификаторов. То, с чем я нахожу проблему, похоже, в юникоде.
После вставки термина «определения» я наложил ограничение на уникальный ключ для строки, в которой уже есть «определения». Если вы внимательно изучите два, вы обнаружите, что значение, которое я вставляю, это не «f» и «i», а фактически один символ. Тем не менее, SqlCe пытается преобразовать его в бытие и «f» и «я». Десять символов в одном слове, одиннадцать в другом, но SqlCe видит их одинаковыми.
Столбец таблицы nvarchar.
Я указал параметр как nvarchar.
Запрос очень прост:
cmd.CommandText = "INSERT INTO dictionary(lemma) VALUES(?);";
DbParameter lemma = cmd.CreateParameter();
cmd.Parameters.Add(lemma);
for (int i = 0; i < terms.Count; i++)
{
lemma.Value = terms[i].Key;
cmd.ExecuteNonQuery();
}
Я также пробовал:
cmd.CommandText = "INSERT INTO dictionary(lemma) VALUES(?);";
SqlCeParameter lemma = new SqlCeParameter("lemma", SqlDbType.NVarChar);
cmd.Parameters.Add(lemma);
for (int i = 0; i < terms.Count; i++)
{
lemma.Value = terms[i].Key;
cmd.ExecuteNonQuery();
}
В том, что я вставляю, байты для символа 'f' равны 1 251, в отличие от 'f' и 'i' 105 0, 110 0.
Смотрите следующее:
{byte[20]}
[0]: 100
[1]: 0
[2]: 101
[3]: 0
[4]: 1
[5]: 251
[6]: 110
[7]: 0
[8]: 105
[9]: 0
[10]: 116
[11]: 0
[12]: 105
[13]: 0
[14]: 111
[15]: 0
[16]: 110
[17]: 0
[18]: 115
[19]: 0
Принимая во внимание, что значение в базе данных (которое SqlCe видит как нарушение уникального ключа):
{byte[22]}
[0]: 100
[1]: 0
[2]: 101
[3]: 0
[4]: 102
[5]: 0
[6]: 105
[7]: 0
[8]: 110
[9]: 0
[10]: 105
[11]: 0
[12]: 116
[13]: 0
[14]: 105
[15]: 0
[16]: 111
[17]: 0
[18]: 110
[19]: 0
[20]: 115
[21]: 0
Как я могу заставить SQL Server CE правильно вставить значение?
РЕДАКТИРОВАТЬ: Исправлен код, показанный выше.