我应该使用INT,CHAR或VARCHAR作为社会安全号吗?

时间:2014-09-03 23:18:03

标签: mysql sql database database-design

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

请注意,我将在此表中使用ID列作为主键,因此SSN不会被用作密钥。

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

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

VARCHAR注意事项:不具备其他两个方面的任何好处,但却是最灵活的方法,例如,如果长度发生变化,则不会受到影响。< / p>

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

1 个答案:

答案 0 :(得分:8)

虽然SSN只是数字,但它不代表一个数字。你不会在整个SSN上进行任何数值计算,因此将它存储为数字并没有多大意义。

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

关于验证SSN的长度和内容,这实际上是用户界面的工作。数据库不应该允许任何损害数据完整性的内容,但是无效的SSN不会以这种方式造成伤害。

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