我应该使用INT、CHAR或VARCHAR作为社会保障号码吗



我正在为一个新项目设计数据库,我不确定是否应该使用INT、CHAR或VARCHAR作为员工的社会保障号码。在我国,SSN由11位数字组成。

请注意,我将使用ID列作为该表的主键,因此SSN不会用作键。

INT注意事项:不可能在列中错误地存储文本,这很好,但我无法确保插入的值具有正确的位数。

CHAR注意事项:我可以确保条目的数字数量正确,但我不能确定这些数字是否是数字,并且SSN的长度将来可能会增加。

VARCHAR注意事项:没有其他两种的任何好处,但它是最灵活的一种,例如,如果长度发生变化,它不会受到影响。

是否有SSN的标准数据类型?你们用什么?

尽管SSN只是数字,但它并不代表单个数字。你永远不会对整个SSN进行任何数值计算,所以把它存储为数字真的没有多大意义。

将其存储为数字会占用较少的空间,但不会占用太多空间,因为您需要一个bigint(8字节)来保存11位数字。使用varchar将使用11个字节作为字符,另一个字节作为长度,因此差异不足以促使将其存储为数字。

关于验证SSN的长度和内容,这实际上是用户界面的工作。数据库不应该允许任何损害数据完整性的内容,但无效的SSN在这种情况下是无害的。

我会使用varchar,因为它提供了您提到的灵活性。

最新更新