Tôi đang sử dụng SQLite trong một ứng dụng Java thông qua Zentus. Trong bối cảnh này, tôi cần lưu và truy vấn các giá trị Java long
trong cơ sở dữ liệu của tôi. Đến từ RDBMS khác mà tôi tạo ra bảng như sau để lưu trữ các giá trị dài:Các loại dữ liệu SQLite
CREATE TABLE myTable (id INTEGER PRIMARY_KEY, longValue LONG)
Giải pháp này tạo ra hành vi trừ nhưng sau khi đọc SQLite documentation on data types tôi hiểu rằng loại LONG
của tôi có tác dụng tương tự vì sử dụng TEXT
=>longValue
là được lưu dưới dạng văn bản.
Sau đó, tôi quyết định đổi số này thành INTEGER
(độ dài thay đổi và có thể lưu trữ tối đa 64 bit số nguyên là chiều dài của Java) để có mã sạch hơn và có thể tiết kiệm dung lượng đĩa và tăng biểu diễn vì longValues của tôi được chèn và truy vấn là long
.
Sau khi so sánh các buổi biểu diễn và kích thước của cơ sở dữ liệu được tạo ra tôi không thể nhìn thấy bất kỳ sự khác biệt giữa:
CREATE TABLE myTable (id INTEGER PRIMARY_KEY, longValue LONG)
và
CREATE TABLE myTable (id INTEGER PRIMARY_KEY, longValue INTEGER)
Bất kỳ ý kiến, kinh nghiệm hay cảm xúc về đề tài này?
Vì vậy, tôi tự hỏi: tại sao các loại cột tồn tại? –
Cột có "ái lực"; ví dụ, một cột văn bản được chuyển qua một chuỗi số nên lưu trữ nó dưới dạng văn bản, giữ nguyên định dạng (chữ số thập phân, v.v.). Trong khi một cột số được chuyển qua một chuỗi số sẽ chuyển đổi nó thành một số trước khi lưu trữ, vì vậy "10,00" sau đó sẽ được trả về chỉ là "10". Vì cột DÀI có mối quan hệ số mặc định, việc thay đổi loại thành INTEGER không thay đổi bất kỳ thứ gì. –
Câu trả lời fron SQlite trang web là: "Để tối đa hóa khả năng tương thích giữa SQLite và các công cụ cơ sở dữ liệu khác, SQLite hỗ trợ khái niệm" loại ái lực "trên các cột. Ý tưởng quan trọng ở đây là loại được khuyến nghị, không bắt buộc, bất kỳ cột nào cũng có thể lưu trữ bất kỳ loại dữ liệu nào. Nó chỉ là một số cột, được chọn, sẽ thích sử dụng một lớp lưu trữ hơn một "Nhưng cái gì" thích "có nghĩa là ?? Có bất kỳ tác động nào đến kích thước biểu diễn và cơ sở dữ liệu không? –