Nén dữ liệu thông qua mã hóa Base36


7

Tôi đang cố lưu trữ rất nhiều số lượng lớn bị cắt bớt khi được lưu trữ dưới dạng INTgiá trị. Thật không may, chúng quá lớn cho loại này.

Tôi đang suy nghĩ về việc sử dụng mã hóa Base36 để thực hiện điều này. Có cách nào khác để khắc phục vấn đề này không?


1
Những con số này lớn đến mức nào? Lớn hơn BIGINTcó thể lưu trữ?
ypercubeᵀᴹ

oh wow: p không biết có một thứ như BIGINT ... Tôi vẫn là một lập trình viên C
Glenna Mccraw

Câu trả lời:


13

Thường xuyên hơn không, Base36mã hóa sẽ dẫn đến mất độ chính xác vì quá trình chuyển đổi cơ sở yêu cầu các hoạt động số dấu phẩy động. Điều này không chỉ làm hỏng dữ liệu của bạn khi chuyển đổi sang và từ đó Base36, bạn cũng sẽ tiêu tốn nhiều dung lượng hơn ( INTchiếm 4 byte, nhiều Base36số nguyên được mã hóa gần giới hạn tích phân không dấu 32 bit sẽ chiếm nhiều hơn mức này).

Xem tài liệu của PHP để được giải thích kỹ lưỡng về sự mất độ chính xác.


Trả lời : Bạn nên sử dụng BIGINT cho các hoạt động của mình.


8

Bạn có thể sử dụng một trong hai

lớn hơn INT, BIGINTkiểu dữ liệu số nguyên :

BIGINT UNSIGNED: các giá trị từ 0tối đa 2^64-1(khoảng 18 * 10^18)

BIGINT SIGNED: Giá trị từ -2^63lên đến 2^63-1(khoảng -9 * 10^18đến 9 * 10^18)

hoặc kiểu dữ liệu điểm cố định NUMERIC(cũng được đặt tên DECIMAL):

DECIMAL(M, 0): giá trị từ -(10^M-1)tối đa10^M+1

Mthể lên tới 65, vì vậy bạn có thể lưu trữ số nguyên với tối đa 65 chữ số thập phân.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.