【发布时间】:2011-07-29 08:09:09
【问题描述】:
假设我想将印度手机号码存储在 MySQL 表中,因为记录的数量非常多,我想优化我的存储。
印度手机号码是 10 位数字,通常以 7,8 或 9 开头。
例如9XXXXXXXXX。
相关的 MySQL 字段是:
Type Storage Minimum Value Maximum Value
(Bytes) (Signed/Unsigned) (Signed/Unsigned)
INT 4 -2147483648 2147483647
0 4294967295 <-- somewhat small
BIGINT 8 -9223372036854775808 9223372036854775807
0 18446744073709551615 <-- too large
正如所见,unsigned INT 小一点(大约值的一半),而 unsigned BIGINT 非常大,可以存储 10 位数字。 5 个字节足以存储此数据。
我的问题是:-
a) 有没有一种好方法可以分配自定义字节数并将此数据以任何可用数据类型存储在 MYSQL 中?
b) 这是过早的优化吗?尝试这样做有什么优势/劣势吗?
c) 使用自然大小的数据类型(如 4 字节和 8 字节数字)并忽略数据库中的中间大小(如 5 字节和 6 字节)有什么好处?
注意:假设 10 位数字不是电话号码,而是 10 位整数。 VARCHAR 不是我想要的。
【问题讨论】: