我正在解决一个问题,我需要将一个sqlite数据库附加到另一个。其中一个数据库由我的应用程序创建,另一个数据库是从远程服务器下载的。我更喜欢用合法的数据格式(如JSON)来获取它,但我无法控制这方面。
问题是下载的sqlite文件的编码是UTF-16le。本地文件是UTF-8(Android的默认值)。我可以自己读取这两个文件,但SQLite只允许在编码匹配时进行ATTACH操作。
解决方案应该像创建本地数据库时使用UTF-16le编码一样简单,但似乎在获取数据库对象之前总是设置编码,我无法更改它。我正在使用SQLiteOpenHelper,我假设所有PRAGMA语句都应该在onConfigure()中发生,如下所示:
@Override
public void onConfigure(SQLiteDatabase db) {
db.execSQL("PRAGMA encoding = \"UTF-16le\"");
}
当我在此点之后检查编码时,它总是UTF-8。
Log.d(TAG, DatabaseUtils.dumpCursorToString(db.rawQuery("PRAGMA encoding", null)));
结果:
04-12 11:10:07.116: D/MainActivity(10743): >>>>> Dumping cursor android.database.sqlite.SQLiteCursor@b3636fd0
04-12 11:10:07.116: D/MainActivity(10743): 0 {
04-12 11:10:07.116: D/MainActivity(10743): encoding=UTF-8
04-12 11:10:07.116: D/MainActivity(10743): }
04-12 11:10:07.116: D/MainActivity(10743): <<<<<
我甚至尝试在内存中创建数据库并设置其编码,但之后总是会报告UTF-8:
SQLiteDatabase db = SQLiteDatabase.create(null);
db.execSQL("PRAGMA encoding = \"UTF-16le\"");
我有点困惑,因为我可以打开这些UTF-16le编码的数据库并正确报告它们的编码,但我似乎无法在设备上创建一个。在我创建数据库时,有没有办法设置数据库的编码?