带有西里尔字母编码的SQLite错误

本文关键字:编码 SQLite 错误 | 更新日期: 2023-09-27 18:07:29

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

源DB上的编码是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);

但是结果是一样的!

有什么建议吗?我能做什么?

带有西里尔字母编码的SQLite错误

到目前为止,您肯定找到了一些解决方案,但对于其他人来说,这就是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'";