Como lidar com caracteres UTF-8 em sqlite2 à migração sqlite3
-
01-07-2019 - |
Pergunta
Tentando a abordagem fácil:
sqlite2 mydb.db .dump | mydb-new.db sqlite3
Eu tenho esse erro:
erro SQL perto da linha 84802: nenhuma coluna: D
Nessa linha o script é o seguinte:
Os valores INSERT INTO vehiculo (127548, '21K0065217', N , 'PA007808', 65217,279,1989,3,468, '1998/07/30 00: 00: 00.000000', '14 / 697/98-07' , 2, '', 1);
Meu palpite é que o 'N' sem aspas é o problema .
alguma idéia?
PD:. Estou sob o Windows agora e eu gostaria de usar a linha de comando para que ele possa ser automatizada (este processo será feito diariamente por um servidor)
Solução
Basta abrir o banco de dados v2 com o CLI binário sqlite3, e depois salvá-lo. O arquivo de banco de dados será transparente migraram para v3.
Ele não funciona.
$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
E o arquivo não é alterado (aparentemente sqlite3 não poderia lê-lo). Eu acho que o problema original é um bug no sqlite2.
Outras dicas
Basta abrir o banco de dados v2 com o CLI binário sqlite3, e depois salvá-lo. O arquivo de banco de dados será transparente migraram para v3.
$ sqlite3 v2database.db
sqlite> .quit
$
Nota:. Pode ser necessário inserir / excluir uma linha antes de sair para forçar uma atualização
Bem ninguém resposta ... no final eu acabar modificando meu roteiro original (aquele que criou o banco de dados sqlite2 em primeiro lugar) para criar o banco de dados diretamente em sqlite3.
Eu acho que um script de processamento de corda grande (grande, porque os bancos de dados mi são 800MB e 200MB cada) pode fazer o trabalho, mas gerar o banco de dados diretamente era mais fácil para mim.
Eu tentei fazê-lo sem intervenção do Windows:
* chamando sqlite2 em old.db, e enviar o despejo diretamente para um arquivo
* e sqlite3 em seguida, chamada em new.db e carregar o despejo diretamente do arquivo.
Apenas em janelas de casos estava mexendo com os caracteres na linha de comando.
mesmo resultado.