Файл данных Sqlite в Linux и OS X несовместим? - PullRequest
3 голосов
/ 23 февраля 2011

Я создаю таблицу и заполняю ее, выполняя следующее на компьютере с ARM Linux

~ # sqlite3 /mnt/mmc/test.db
SQLite version 3.6.12
sqlite> create table a (d);
sqlite> insert into a values (1.5);
sqlite> select * from a;
1.5

Затем я передаю файл на мой Mac и выполняю следующее

themac:~ me$ sqlite3 test.db 
SQLite version 3.6.12
sqlite> select * from a;
5.30239915051991e-315

Whaaat? Я думал, что файл данных не зависит от платформы.

Ответы [ 2 ]

5 голосов
/ 23 февраля 2011

У меня нет особых знаний о SQLite, но это свидетельствует о проблеме, когда два 32-битных слова 64-битного формата IEEE 754 double меняются местами, как вы можете видеть в этом примере (который был запущениспользуя gcc на компьютере x86):

$ cat test.c
#include <stdio.h>

int main(void)
{
    union {
        double d;
        unsigned long long ull;
    } u;

    u.d = 1.5;
    printf("%016llx\n", u.ull);

    u.d = 5.30239915051991e-315;
    printf("%016llx\n", u.ull);

    return 0;
}
$ gcc -Wall -o test test.c
$ ./test
3ff8000000000000
000000003ff80000
$ 
0 голосов
/ 23 февраля 2011

Формат файла не зависит от платформы, по крайней мере, в соответствии с http://www.sqlite.org/onefile.html

База данных в SQLite представляет собой один диск файл. Кроме того, формат файла кросс-платформенный. База данных, которая созданные на одной машине могут быть скопированы и используется на другой машине с другая архитектура. SQLite базы данных переносимы через 32-битные и 64-битные машины и между с прямым порядком байтов и с прямым порядком байтов архитектуры.

Возможно ли, что файл был поврежден во время передачи? Можете ли вы запустить md5sum в обеих средах и подтвердить, что файлы идентичны?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...