Oracle - 用于存储特定长度的数据的数据类型

Pac*_*ane 1 sql oracle types sqldatatypes

我想弄清楚我应该在我的数据库中使用什么数据类型来存储固定的8位数字.

我应该使用char(8)即使它接受其他字符并在应用程序端验证或有类似的东西number(x)可以使它?

我对电话号码栏也有同样的困境.我应该使用char(x)什么或更合适的东西?

编辑 - 您的问题的答案:

  1. 第一个固定的8位数列很可能用作主键.它代表了我国的社会安全号码.此列上不会进行任何算术运算.我需要保留所有数字(甚至可能是前导零).虽然,它可能会排序(因为它将是一个主键)
  2. 对于电话号码,我打算将它存储为如下字符串:12345678901.问题更多的是"如何确保这char[]不会接受字母或其他字符.是否应该在客户端进行验证?

Col*_*art 7

这取决于.

这是一个数字吗?你会对这个数字进行数学运算吗?你会用数字排序吗?如果是,则将其存储为数字.您还应该创建一个约束以确保该数字始终具有8位数:

number_field number(8) check (number_field between 11111111 and 99999999)
Run Code Online (Sandbox Code Playgroud)

如果它更像是代码(如信用卡号,社会安全号或帐号),我想我会使用char(8)和检查约束来确保它只包含数字(正则表达式非常好)用于此).通过使用char数据类型而不是varchar,您不需要确保该字段包含8个字符,只是字符是全部数字.

code_field char(8) check (regexp_like(code_field, '[:digit:]{8}'))
Run Code Online (Sandbox Code Playgroud)

实际上,您想要的是域,但Oracle没有它们.

至于是否验证客户端或服务器端,在我的世界中,我总是依赖数据库约束来确保存储在数据库中的数据尽可能干净.在我的应用程序中,我测试约束违规以向用户返回适当的错误.当然,您也可以在客户端进行验证,但为什么要重复自己呢?唯一的情况是你想避免往返服务器.