带有西里尔字母编码的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的查询。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'";