【问题标题】:Multi Language characters in SQLite Universal Windows 10SQLite Universal Windows 10 中的多语言字符
【发布时间】:2016-04-12 23:16:51
【问题描述】:

我想在我的数据库中使用多语言字符串的 UTF-8 标准,例如我想插入一些俄语字符串并检索它们以供以后使用。此刻我得到了???在我的数据库中使用符号而不是俄语字符。有没有办法将我的数据库设置为使用多种语言字符?

我发现了一些关于 PRAGMA 的帖子,但我无法使用,例如:

await Database.ExecuteAsync("PRAGMA encoding='UTF-8'");

我使用 SQLite.Net-PCLSystem.Data.SQLiteSQLite for Universal Windows Platform 作为参考。

我的实际数据库创建代码:

public static string SQL_DB_PATH = Path.Combine(ApplicationData.Current.LocalFolder.Path, "my_db");

  public static void createDbMethod() {
            using (var conn = new SQLiteConnection(new SQLitePlatformWinRT(), SQL_DB_PATH)) {

                try {
                    // Start transaction
                    conn.BeginTransaction();
                    try {
                        // Execute table creation commands...                     
                        conn.CreateTable<MyTableOne>();
                        conn.CreateTable<MyTableTwo>();
                        conn.CreateTable<MyTableThree>();

                        //Commit transaction
                        conn.Commit();

                        } catch (Exception ex) {
                        //handle exception
                        // Rollback transaction
                        conn.Rollback();
                        }

                    } catch (Exception e) {
                     //handle exception

                    } finally {
                    conn.Close();
                    }
                }
            }

编辑 我的插入查询是:

public static void executeSqlQuery(string singSqlQuery) {
        using (var conn = new SQLiteConnection(new SQLitePlatformWinRT(), SQL_DB_PATH)) {

            // Open connection
            try {
                // Start transaction
                conn.BeginTransaction();
                try {
                    // Execute commands...
                    conn.Execute(singSqlQuery);

                    // Commit transaction
                    conn.Commit();

                    } catch (Exception ex) {
                    // Rollback transaction
                    conn.Rollback();
                    }

                } catch (Exception e) {
                //handle exception 

                } finally {
                conn.Close();
                }
            }
        }

singSqlQuery 是一个常见的 sql 查询,例如: INSERT OR REPLACE INTO my_tab (id,name) VALUES('1','some characters');

【问题讨论】:

  • 你的数据库字符集和排序规则是什么?
  • 我是windows的初学者,我知道在Android中它会自动运行,我在哪里可以设置你的character setcollation
  • 我不熟悉 SQLite,所以你可能想看看这里:stackoverflow.com/questions/1188749/… - 请注意,如果这是 原因,则意味着您的原始数据已插入并且已损坏,因此这只会解决您的插入问题排序规则更改
  • SQLite 总是使用 Unicode。问题一定出在 I/O 上。
  • 你可能需要parameterize your queries: conn.Execute("INSERT OR REPLACE INTO my_tab (id,name) VALUES(?, ?)", 1, "some characters");

标签: c# sqlite win-universal-app


【解决方案1】:

SQLite 默认完全支持 Unicode 数据的存储。你不需要做任何特别的事情,它就是有效的。如果您没有取出您放入的内容,那么问题在于您的插入或检索。很可能在您不打算的地方发生了转换。如果您还没有这样做,您可能希望对插入使用参数化查询。

【讨论】:

  • 是的,问题在于插入,我只是更改了一点我的 sql 查询,使用参数化 @chue x 的解决方案,我的问题就消失了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-23
  • 1970-01-01
  • 2019-05-28
  • 1970-01-01
  • 2016-01-15
  • 2019-11-03
相关资源
最近更新 更多