SQLite错误与西里尔语编码

时间:2015-08-12 18:01:27

标签: c# sqlite xamarin.forms portable-class-library

我正在使用Xamarin SQLite.NET PCL包。我还有一个拥有100万条记录的数据库。

我的源数据库上的编码是UTF8。为了获得最佳性能,我选择了一个FTS引擎。除了使用西里尔语编码的文本外,一切正常。

示例,以下简单查询:

"SELECT name FROM customers WHERE name MATCH '"+filter+"*' LIMIT 50";

其中filter是一个带值的字符串常量。该值取决于用户从键盘输入的内容。 (它就像动态搜索一样)

问题是当过滤器包含西里尔语值时,我得到一个SQLite异常:

  

SQLite.Net.SQLiteException:near" ":语法错误

我试过这样的事情:(将我的字符串查询编码为UTF-8)

 string Query = String.Format("SELECT name FROM customer WHERE name MATCH '{0}*' LIMIT 50;",filter);
 Encoding encod = Encoding.UTF8;
 byte[] bts = encod.GetBytes(Query);
 encod = Encoding.Unicode;
 string Output = encod .GetString(bts, 0, bts.Length);

但结果是一样的!

有什么建议吗?我该怎么办?

1 个答案:

答案 0 :(得分:0)

到目前为止,您肯定找到了一些解决方案,但对于其他任何人来说,SQLite.Net PCL的查询应该与参数一样:

string query = "SELECT name FROM customers WHERE name MATCH @param1 LIMIT 50";
string param = "'your unicode characters'";
conn.execute(query,param);

如果查询中有更多参数(例如@ param1,@ param2),则用逗号分隔它们,如下所示:

string param = "'your unicode characters','your second parameter'";