通过 Base36 编码进行数据压缩

Gle*_*raw 7 mysql database-design optimization

我正在尝试存储大量在存储为INT值时会被截断的大数。不幸的是,它们对于这种类型来说太大了。

我正在考虑使用Base36编码来实现这一点。有没有其他方法可以解决这个问题?

Dan*_* Li 13

通常情况下,Base36编码会导致精度损失,因为基数转换过程需要浮点数运算。这不仅会在转换为 和来自 时损坏您的数据,而且Base36您还将消耗更多空间(INT占用 4 个字节,许多Base36接近 32 位无符号整数限制的编码整数将占用更多空间)。

有关精度损失的详细解释,请参阅PHP 的文档


:您应该使用BIGINT进行操作。


ype*_*eᵀᴹ 8

你可以使用,

大于INT, 整数BIGINT数据类型:

BIGINT UNSIGNED: 值从0up 到2^64-1(about 18 * 10^18)

BIGINT SIGNED: 值从-2^63up to 2^63-1(about -9 * 10^18to 9 * 10^18)

或定点NUMERIC(也称为DECIMAL)数据类型:

DECIMAL(M, 0): 值从 -(10^M-1)10^M+1

M可以达到65,所以你可以存储整数多达65个十进制数字。