gpt4 book ai didi

mysql - 如何在 mysql 中分配 N 个字节来存储整数而不是 4 个字节或 8 个字节?

转载 作者:可可西里 更新时间:2023-11-01 07:57:19 25 4
gpt4 key购买 nike

假设我想将印度手机号码存储在 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 不是我要找的。

最佳答案

我同意@diEcho 的观点,您应该使用 VARCHAR() 作为电话号码。在我的一生中,我有 6 位数、7 位数、9 位数和(因为我经常在不同的县,需要提供国家代码和我的号码)13 位数。

这里的经验法则是,除非您要进行算术运算,或者您确实需要像“20 > 9”这样的比较为真,否则请将此数据保留为字符。

如果您遇到类似的问题,您需要固定数量的数字,而这些数字不容易放入 INT 或 BIGINT,并且您需要数字比较,那么只需使用 DECIMAL(不带小数说明符),如 DECIMAL(9) .

关于mysql - 如何在 mysql 中分配 N 个字节来存储整数而不是 4 个字节或 8 个字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6870309/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com