将AIR应用程序中的SQLite数据库编码更改为UTF-8

10
在AIR应用程序中,您可以通过flash.data类使用SQLite。默认情况下,创建的数据库编码设置为UTF-16le,这意味着文本数据以每个字符两个字节的形式存储,导致ASCII-heavy数据库内容几乎增加了100%的开销。
SQLite数据库的默认值是UTF-8,假设shell程序(sqlite3)是指示性的。Adobe可能出于某种原因决定覆盖此设置,但如果可能的话,我宁愿不浪费存储空间。
在向数据库写入任何内容之前使用PRAGMA encoding = "UTF-8";语句通常可以解决此问题,但似乎在AIR中不允许这样做
目前我的解决方法是使用预先创建并打包到应用程序中的“template.db”。在此template.db中,我手动将编码设置为UTF-8。如果在程序启动时数据库文件不存在,则通过将该模板复制到我的数据库文件来创建它,然后继续正常打开和使用它。我已确认TEXT数据以所需的UTF-8格式存储。
我还没有看到任何负面影响,但这是一种hackish的方法。有没有更好的方法来设置编码为UTF-8?或者由于某种原因这是一个坏主意?

你有没有找到这个问题的答案?我现在也遇到了同样的情况。 - fizban
1
除了我的解决方法,没有其他的。不过它运行得很好,并且被用于生产代码中。 - Peter Hansen
1
我建议您将您的解决方法作为答案添加并接受它。 - Daniel Gehriger
2个回答

1

在没有其他解决方案或答案的情况下,我将我的解决方法发布为答案。在PlayBook应用程序中使用了两年,所以可能没有未预见的副作用,至少在那个环境中:

我的临时解决方法是使用一个提前创建并打包到应用程序中的“template.db”。在这个template.db中,我手动设置了编码为UTF-8。如果数据库文件在我的程序启动时不存在,我通过将该模板复制到我的数据库文件来创建它,然后继续正常地打开和使用它。我已确认TEXT数据现在按照所需的UTF-8存储。


0

您可以检查项目的执行源文件,例如C# Visual Studio项目中的/bin/debug。

提交的更改不一定会在其他文件夹中的数据库中执行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接