我从各种来源获取各种文档的非结构化文本。我正在使用Sql Server Compact Edition 3.5。为什么Sql CE会改变我的unicode值?
我创建了一个带有唯一字的查找表,并通过一个ID引用它们作为标识列。我发现问题似乎是unicode。
插入术语“定义”后,我对已经具有“定义”的行执行唯一键约束。如果仔细检查两者,你会发现我插入的值不是'f'和'i',而是单个字符。然而,SqlCe试图将它转换为“f”和“i”。一个字中有十个字符,另一个字符中有十个字符,但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();
}
在什么我插入,为 '网络连接' 字符的字节是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
而值在DAT ABASE(一个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正确地将价值?
编辑:更正了上面显示的代码。
它是nvarchar数据类型吗? – Holystream 2011-02-15 23:00:23
插入的值来自C#字符串 – McAden 2011-02-15 23:18:22