Pac*_*ane 1 sql oracle types sqldatatypes
我想弄清楚我应该在我的数据库中使用什么数据类型来存储固定的8位数字.
我应该使用char(8)即使它接受其他字符并在应用程序端验证或有类似的东西number(x)可以使它?
我对电话号码栏也有同样的困境.我应该使用char(x)什么或更合适的东西?
编辑 - 您的问题的答案:
12345678901.问题更多的是"如何确保这char[]不会接受字母或其他字符.是否应该在客户端进行验证?这取决于.
这是一个数字吗?你会对这个数字进行数学运算吗?你会用数字排序吗?如果是,则将其存储为数字.您还应该创建一个约束以确保该数字始终具有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没有它们.
至于是否验证客户端或服务器端,在我的世界中,我总是依赖数据库约束来确保存储在数据库中的数据尽可能干净.在我的应用程序中,我测试约束违规以向用户返回适当的错误.当然,您也可以在客户端进行验证,但为什么要重复自己呢?唯一的情况是你想避免往返服务器.