我正在使用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);
但结果是一样的!
有什么建议吗?我该怎么办?
答案 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'";