2011-01-03 28 views
6

Tôi đang sử dụng SQLite để lưu trữ một số dữ liệu. Cơ sở dữ liệu chính là trên một NAS (Debian Lenny, 2.6.15, armv4l) vì NAS chạy một kịch bản cập nhật dữ liệu mỗi ngày. Một điển hình "select * from tableX" trông như thế này:SQLite có thực sự đa nền tảng không?

2010-12-28|20|62.09|25170.0 
2010-12-28|21|49.28|23305.7 
2010-12-28|22|48.51|22051.1 
2010-12-28|23|47.17|21809.9 

Khi tôi sao chép DB vào máy tính chính của tôi (Mac OS X) và chạy các truy vấn SQL tương tự, sản lượng là:

2010-12-28|20|1.08115035175016e-160|25170.0 
2010-12-28|21|2.39343503830763e-259|-9.25596535779558e+61 
2010-12-28|22|-1.02951149572792e-86|1.90359837597183e+185 
2010-12-28|23|-1.10707273937033e-234|-2.35343828462275e-185 

Cột thứ 3 và thứ 4 có loại REAL. Thực tế thú vị: Khi các số là số nguyên (tức là chúng kết thúc bằng ".0"), không có sự khác biệt giữa hai cơ sở dữ liệu. Trong mọi trường hợp khác, sự khác biệt là ... hm ... đáng ngạc nhiên? Tôi không thể tìm thấy một mô hình.

Nếu ai đó có đầu mối - hãy chia sẻ!

PS: sqlite3 đầu ra -version Debian: 3.6.21 (lenny-backports) Mac OS X: 3.6.12 (10,6)

+1

Tôi cũng không thể tìm thấy mẫu. Nó KHÔNG phải là trao đổi byte. – dan04

Trả lời

3

Khi phát hành 3.4.0 của SQLite, có thêm cờ thời gian biên dịch.

  • gia tăng các SQLITE_MIXED_ENDIAN_64BIT_FLOAT tùy chọn để hỗ trợ bộ vi xử lý ARM7 với endianness ngốc nghếch thời gian biên dịch.

Tôi gặp vấn đề tương tự với thiết bị Arm920Tid và máy ảo dựa trên x86 của tôi. Thiết bị cánh tay đang ghi dữ liệu và tôi đang cố đọc nó trên máy ảo x86 (hoặc trên máy Mac của tôi).

Sau khi thêm cờ thời gian biên dịch này vào tệp makefile của tôi để xây dựng cánh tay, tôi có thể nhận được các giá trị lành mạnh khi tôi truy vấn DB trên một trong hai nền tảng.

Để tham khảo Tôi đang sử dụng sqlite 3.7.14

+0

Tuyệt vời, điều đó thực sự hiệu quả! – pruefsumme

2

Nó nên được, các file format nói rằng REAL được lưu trữ trong big- định dạng cuối cùng, sẽ là kiến ​​trúc bất biến nếu được tuần tự hóa một cách chính xác bởi cả hai bản dựng.

Giá trị 7 được lưu trong tiêu đề bản ghi cơ sở dữ liệu cho biết giá trị cơ sở dữ liệu tương ứng là số thực SQL (số dấu phẩy động). Trong trường hợp này, blob dữ liệu chứa số dấu chấm động 8 byte IEEE, được lưu trữ theo thứ tự byte lớn nhất.

+0

Tôi cảm thấy nhẹ nhõm vì nó * nên * là nền tảng chéo nhưng tôi tự hỏi điều gì đang gây ra những khác biệt này trong db sqlite của tôi. – pruefsumme

+2

Có thể là lỗi trong quá trình triển khai. –

Các vấn đề liên quan