我应该使用哪种数据类型来处理9位数字的帐号,为什么?
varchar(9)或int或小数或其他内容?
我是从数据库角度讲的-DBMS是Informix.
解决方法:
TL; DR使用CHAR(9).
您有许多选择,其中大多数在注释中提到.选项具有不同的权衡.他们包括:
> CHAR(9).这使用9个字节的存储空间,但是可以存储前导零,并且可以节省应用程序中的格式.您可以编写一个检查约束,以确保该值始终包含9位数字.如果以后需要使用更长的数字,则可以轻松地将类型扩展为CHAR(13)或CHAR(16)或其他类型.
>整数.这将使用4个字节的存储空间.如果需要前导零,则必须自行格式化.如果以后需要更多数字,则需要将类型更改为BIGINT.
>系列.可以在一个表上使用它,当您在列中插入零时会自动生成新值.交叉引用表将使用INTEGER类型.
> DECIMAL(9,0).这使用5个字节的存储空间,并且不存储前导零,因此您必须自己格式化它们.如果以后需要更多数字,则可以将类型更改为DECIMAL(13,0)或DECIMAL(16,0)或其他.
> BIGINT和BIGSERIAL.这些是8字节整数,可以毫无问题地将您带到16位数字.您必须自己提供前导零.
> INT8和SERIAL8-不要使用这些类型.
> VARCHAR(9).由于长度是可变的,因此不太合适.磁盘上需要10个字节,其中9个就足够了.
> LVARCHAR(9).这甚至比VARCHAR(9)更不合适.
> NCHAR(9).这实际上可以与CHAR(9)等效,但是如果仅存储数字,则也可以使用CHAR(9).
> NVARCHAR(9).由于VARCHAR(9)和NCHAR(9)不适合的相同原因而不合适.
>金钱(9,0).基本上与DECIMAL(9,0)等效,但可能会吸引货币符号-最好使用DECIMAL(9,0).
除非您设计使用INTEGER进行存储但提供对CHAR(9)的转换函数并添加前导零的扩展类型,否则任何其他类型都会很快不合适.