百科知识

手机怎么看32位与62位

手机怎么看32位与62位

前言

有一名网友参加字节面试,遇到了一道关于手机号存储的问题:是选择int还是string,varchar还是char?为什么?他的回答似乎未能令面试官满意,最终未能通过面试。本文将围绕这个问题展开讨论,并分享一些相关的思考。

一、使用Int存储20亿数据存在哪些问题?

1. 存储问题:

我们知道,手机号是11位的数字。而Java中的int类型是32位,最大值约为210^9。显然,用int无法存储20亿手机号数据。

为了解决这个问题,我们需要使用64位的Long类型,但在数据库中可能对应的是BigInt类型。

2. 数据完整性问题:

例如手机号,使用Long类型存储时会变成,了数据的完整性。并且,Java不允许以0开头的Long整数。

有些手机号可能包含代码(如+86),或者包含连字符,如137-2819-9213。这些因素都使得整型无法很好地存储手机号。

3. 查询问题:

如果我们使用BigInt(Long类型)存储手机号,当需要查找以某个数字开头的手机号时,需要先转为字符串再进行模糊匹配,这会大大降低查询效率。

二、使用String存储有何好处?

1.保真:字符串可以存储数字、符号和前导零,保留原始格式。

2.灵活:支持模糊查询和国际号码,方便扩展。

3.省心:无需担心溢出或格式转换问题。

在实际数据库设计中,我们可能会选择VARCHAR(20)来存储手机号,而不是VARCHAR(11)。这是因为我们还需要考虑国际号码、带码的号码、分机号等情况,VARCHAR(11)可能无法满足这些需求。使用VARCHAR(20)可以为未来的业务扩展留出余地。还需要考虑字符集和排序规则、索引设计、数据清洗与校验、隐私与安全以及风控校验等问题。所以我们需要合理选择字段长度和类型来满足各种需求并保证系统的稳定性与安全。这是一个我们在设计数据库时需要全面思考的问题。在面试中如果能给出这样的答案将会给面试官留下良好的印象。在日常开发中我们也需要避免一些常见的坑点以确保系统的正常运行和数据安全。


手机怎么看32位与62位

你可能也会喜欢...