Как обрабатывать символы UTF-8 при миграции sqlite2 на sqlite3
-
01-07-2019 - |
Вопрос
Пробуем простой подход:
sqlite2 mydb.db .дамп | sqlite3 mydb-new.db
Я получил эту ошибку:
Ошибка SQL рядом со строкой 84802:такой колонки нет:*
В этой строке сценарий выглядит следующим образом:
ВСТАВИТЬ В ЗНАЧЕНИЯ vehiculo (127548,'21K0065217',Ñ,'PA007808',65217,279,1989,3,468,'1998-07-30 00:00:00.000000','14/697/98-07',2,",1);
Я предполагаю, что буква "С" без кавычек - вот в чем проблема.
есть какие-нибудь идеи?
ПД:Прямо сейчас я нахожусь под управлением Windows, и я хотел бы использовать командную строку, чтобы ее можно было автоматизировать (этот процесс будет выполняться сервером ежедневно).
Решение
Просто откройте базу данных v2 с помощью двоичного интерфейса командной строки sqlite3, а затем сохраните ее.Файл базы данных будет прозрачно перенесен в версию v3.
Это не работает.
$sqlite3 db2
SQLite version 3.6.16
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .tables
Error: file is encrypted or is not a database
sqlite> .q
И файл не изменен (по-видимому, sqlite3 не смог его прочитать).Я думаю, что исходная проблема - это ошибка в sqlite2.
Другие советы
Просто откройте базу данных v2 с помощью двоичного интерфейса командной строки sqlite3, а затем сохраните ее.Файл базы данных будет прозрачно перенесен в версию v3.
$ sqlite3 v2database.db
sqlite> .quit
$
Примечание:возможно, вам потребуется вставить / удалить строку перед завершением работы, чтобы принудительно выполнить обновление.
Ну, никто не отвечает...в конце я заканчиваю тем, что модифицирую свой исходный скрипт (тот, который в первую очередь создал базу данных sqlite2), чтобы создать базу данных непосредственно в sqlite3.
Я думаю, что большой скрипт обработки строк (большой, потому что базы данных mi имеют размер 800 МБ и 200 МБ каждая) может выполнить эту работу, но генерировать базу данных напрямую мне было проще.
Я пытался сделать это без вмешательства Windows:
* вызвав sqlite2 в old.db и отправив дамп непосредственно в файл
* а затем вызовите sqlite3 в new.db и загрузите дамп непосредственно из файла.
На всякий случай Windows перепутала символы в командной строке.
Тот же результат.