Pracuję nad problemem, w którym muszę dołączyć jedną bazę danych sqlite do drugiej. Jedna z baz danych jest tworzona przez moją aplikację, a druga jest pobierana ze zdalnego serwera. Wolałbym uzyskać go w legalnym formacie danych (np. JSON), ale nie mogę kontrolować tego aspektu.Nie można ustawić kodowania SQLiteDatabase na coś innego niż UTF-8
Problem polega na tym, że kodowanie dla pobranego pliku sqlite to UTF-16le. Lokalny plik to UTF-8 (domyślny system Android). Mogę odczytać oba pliki dobrze, ale SQLite zezwala tylko na operacje ATTACH, gdy kodowanie jest zgodne.
Rozwiązanie powinno być tak proste jak kodowanie UTF-16le za każdym razem, gdy tworzę lokalną bazę danych, ale wygląda na to, że kodowanie jest zawsze ustawione zanim otrzymam obiekt bazy danych i nie mogę go zmienić. Używam SQLiteOpenHelper i zakłada się, że wszystkie oświadczenia Pragma powinno się zdarzyć w onConfigure() tak:
@Override
public void onConfigure(SQLiteDatabase db) {
db.execSQL("PRAGMA encoding = \"UTF-16le\"");
}
Kiedy sprawdzić kodowanie po tym momencie, to zawsze UTF-8.
Log.d(TAG, DatabaseUtils.dumpCursorToString(db.rawQuery("PRAGMA encoding", null)));
wynik:
04-12 11:10:07.116: D/MainActivity(10743): >>>>> Dumping cursor [email protected]
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): <<<<<
Próbowałem nawet stworzenie bazy danych w pamięci i ustawienie kodowania, ale to zawsze informuje UTF-8 potem:
SQLiteDatabase db = SQLiteDatabase.create(null);
db.execSQL("PRAGMA encoding = \"UTF-16le\"");
jestem trochę zdezorientowany, ponieważ mogę otworzyć te zakodowane w UTF-16le bazy danych i ich kodowanie jest zgłaszane poprawnie, ale nie mogę go utworzyć na urządzeniu. Czy jest jakiś sposób, aby ustawić kodowanie bazy danych podczas jej tworzenia?
Narzędzia wiersza poleceń SQLite umożliwiają tworzenie bazy danych w trybie UTF-16. [Ta odpowiedź] (http://stackoverflow.com/a/21348574/53212) wyjaśnia, w jaki sposób. – thomasrutter