我正在解决一个问题,我需要将一个 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 编码的数据库并且它们的编码被正确报告,但我似乎无法在设备上创建一个。有没有办法在我创建数据库时设置它的编码?