WPU SQLite.Net.SQLiteConnection.Query 编码问题
WPU SQLite.Net.SQLiteConnection.Query encoding issue
SQLite.Net 的查询存在编码问题。如果我只使用 SQL 字符串中的列名,一切正常,但如果我自己编写 SQL,则每个特殊字符,如 ä、ü、ö、ß 都不会被正确编码。
这里有两个简单的例子,一个有效,一个无效。
public class ass {
[PrimaryKey, AutoIncrement]
public int _id { get; set; }
[MaxLength(255)]
public string sortname { get; set; }
}
dbConn = new SQLiteConnection(new SQLitePlatformWinRT("testpasswort"),DB_PATH);
dbConn.CreateTable<ass>(SQLite.Net.Interop.CreateFlags.None);
//add a test entry with special chars
ass asss = new ass();
asss.sortname = "oe=öae=äszett=ß";
dbConn.Insert(asss);
//now select the test entry to an ass object
List<ass> getass = dbConn.Table<ass>().ToList<ass>();
//the list is filled and sortname = "oe=öae=äszett=ß"
//now fake a object with
List<ass> sqlass = dbConn.Query<ass>("SELECT 'oe=öae=äszett=ß' as sortname FROM ass").ToList<ass>();
//the List is filled and sortname = "oe=�ae=�szett=�"
我知道查询没用,下面的查询会起作用:
List<ass> sqlass = dbConn.Query<ass>("SELECT sortname as FROM ass").ToList<ass>();
但问题是,.Query 函数有编码问题,这将不起作用:
List<ass> sqlass = dbConn.Query<ass>("SELECT sortname FROM ass WHERE sortname LIKE '%ä%'").ToList<ass>();
但这行得通:
List<ass> sqlass = dbConn.Query<ass>("SELECT sortname FROM ass).ToList<ass>().Where(v => v.sortname.Contains("ä"));
每次我在 sqlcode 中有任何特殊字符时它都不起作用,这对我的需求来说是致命的,因为我有很多替换(列、查找、替换)语句,如果查找或替换字符串包含任何 ü,ö,ä [...]
有人知道怎么解决吗?
一个可能的解决方案是使用@params 而不是直接的字符串请求。并使用 UTF-8 encoding pragma, which you can also use to check your existing database encoding. A helpful description for this issue can be found here.
SQLite.Net 的查询存在编码问题。如果我只使用 SQL 字符串中的列名,一切正常,但如果我自己编写 SQL,则每个特殊字符,如 ä、ü、ö、ß 都不会被正确编码。 这里有两个简单的例子,一个有效,一个无效。
public class ass {
[PrimaryKey, AutoIncrement]
public int _id { get; set; }
[MaxLength(255)]
public string sortname { get; set; }
}
dbConn = new SQLiteConnection(new SQLitePlatformWinRT("testpasswort"),DB_PATH);
dbConn.CreateTable<ass>(SQLite.Net.Interop.CreateFlags.None);
//add a test entry with special chars
ass asss = new ass();
asss.sortname = "oe=öae=äszett=ß";
dbConn.Insert(asss);
//now select the test entry to an ass object
List<ass> getass = dbConn.Table<ass>().ToList<ass>();
//the list is filled and sortname = "oe=öae=äszett=ß"
//now fake a object with
List<ass> sqlass = dbConn.Query<ass>("SELECT 'oe=öae=äszett=ß' as sortname FROM ass").ToList<ass>();
//the List is filled and sortname = "oe=�ae=�szett=�"
我知道查询没用,下面的查询会起作用:
List<ass> sqlass = dbConn.Query<ass>("SELECT sortname as FROM ass").ToList<ass>();
但问题是,.Query 函数有编码问题,这将不起作用:
List<ass> sqlass = dbConn.Query<ass>("SELECT sortname FROM ass WHERE sortname LIKE '%ä%'").ToList<ass>();
但这行得通:
List<ass> sqlass = dbConn.Query<ass>("SELECT sortname FROM ass).ToList<ass>().Where(v => v.sortname.Contains("ä"));
每次我在 sqlcode 中有任何特殊字符时它都不起作用,这对我的需求来说是致命的,因为我有很多替换(列、查找、替换)语句,如果查找或替换字符串包含任何 ü,ö,ä [...]
有人知道怎么解决吗?
一个可能的解决方案是使用@params 而不是直接的字符串请求。并使用 UTF-8 encoding pragma, which you can also use to check your existing database encoding. A helpful description for this issue can be found here.