乍一看,在数据库表中存储ZIP codes似乎有两个基本 Select :

  1. 文本(可能是最常见的),即支持+4扩展名的char(5)varchar(9)
  2. 数值,即32位整数

如果我们假设没有国际关注,两者都将满足数据要求.在过go ,我们通常只是走文本路由,但我想知道是否有人做了相反的事情?从简单的比较来看,整数方法有两个明显的优势:

  • 由于其本质,它自动地仅限于数字(而没有验证的文本样式可以存储字母等,据我所知,这些字母在邮政编码中从来都不是有效的).不过,这doesn't意味着我们可以/愿意/应该放弃正常验证用户输入!
  • 它占用的空间更少,只有4个字节(即使对于9位的邮政编码也应该足够了),而不是5或9个字节.

此外,这似乎不会对显示器输出造成太大影响.在数字值上加上ToString(),使用简单的字符串操作来插入+4扩展名的连字符或空格等,并使用字符串格式化来恢复前导零,这是很简单的.

是否有任何东西会阻止使用int作为仅限美国邮政编码的数据类型?

推荐答案

数字邮政编码在某种程度上具有误导性.

数字应该是numeric左右.邮政编码不会加、减或参与任何数字运算.12309-12345没有计算从斯克内克塔迪市中心到我家附近的距离.

诚然,对于邮政编码,没有人会感到困惑.然而,对于其他数字字段,它可能会令人困惑.

由于邮政编码不是数字--它们只是碰巧用受限的字母表编码--我建议避免使用数字字段.1字节的节省不值多少钱.我认为meaning比字节更重要.


Edit

"至于前导零."这就是我要说的.数字没有前导零.邮政编码上有意义的前导零的存在是它们不是数字的又一证明.

Database相关问答推荐

在使用FT.AGGREGATE聚合数据时,如何在Redis上解析ISO 8601时间?

在多组MongoDB中查找最新文档的有效方法

Pocketbase 中的 SQLite 数据库可以根据自己的喜好进行修改吗?

使用 prisma ORM 在我的迁移中手动添加触发器

为什么 INNER JOIN 不等于(!=)永远挂起

如何在 ubuntu 中使用脚本添加带有连字符的数据库名称

在 SQL Server 中找出调用存储过程

add_index 到数据模型 - Ruby on Rails 教程

在 MS SQL 中使用 GUID 作为主键是不是一个坏主意?

Redis: Get key and value on expiration

如何将mysql的默认端口从3306更改为3360

维护 mgo 会话的最佳实践

postgreSQL 同时将列类型从 int 更改为 bigint

如何删除除了postgres中的少数数据库之外的所有数据库

为 django 模型自动创建数据的工具

如何在 MySQL 中清理或调整 ibtmp1 文件的大小?

在 MYSQL 的子查询中使用 LIMIT 关键字的替代方法

您是否应该将自引用表列设为外键?

Oracle order NULL LAST 默认

使用命令行在 Mysql 中导入压缩文件