Как обрабатывать символы UTF-8 при миграции sqlite2 на sqlite3

StackOverflow https://stackoverflow.com/questions/95089

Вопрос

Пробуем простой подход:

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 перепутала символы в командной строке.

Тот же результат.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top