我应该使用哪种数据类型来处理9位数字的帐号,为什么?
varchar(9)intdecimal或其他?

我是从数据库角度讲的-DBMS是Informix。

最佳答案

TL; DR 使用CHAR(9)

您有很多选择,其中大多数在注释中提到。选项具有不同的权衡。它们包括:

  • CHAR(9)。这使用9个字节的存储空间,但是可以存储前导零,并且可以节省应用程序中的格式。您可以编写一个检查约束,以确保该值始终包含9位数字。如果以后需要使用更长的数字,则可以轻松地将类型扩展为CHAR(13)CHAR(16)或其他类型。
  • INTEGER。这将使用4个字节的存储空间。如果需要前导零,则必须自行格式化。如果以后需要更多数字,则需要将类型更改为BIGINT
  • SERIAL。可以在一个表上使用它,当您在列中插入零时会自动生成新值。交叉引用表将使用INTEGER类型。
  • DECIMAL(9,0)。这使用5个字节的存储空间,并且不存储前导零,因此您必须自己格式化它们。如果以后需要更多数字,可以将类型更改为DECIMAL(13,0)DECIMAL(16,0)或其他。
  • BIGINTBIGSERIAL。这些是8字节整数,可以毫无问题地将您带到16位数字。您必须自己提供前导零。
  • INT8SERIAL8-不要使用这些类型。
  • VARCHAR(9)。长度不是可变的,因此不太合适。磁盘上需要10个字节,其中9个就足够了。
  • LVARCHAR(9)。这甚至比VARCHAR(9)更不合适。
  • NCHAR(9)。这在本质上可以与CHAR(9)等效,但是如果您只打算存储数字,则也可以使用CHAR(9)
  • NVARCHAR(9)。由于VARCHAR(9)NCHAR(9)不适合的相同原因而不合适。
  • MONEY(9,0)。基本上与DECIMAL(9,0)等效,但可能会吸引货币符号-最好使用DECIMAL(9,0)

  • 除非您设计使用INTEGER进行存储但提供对CHAR(9)的转换功能并添加前导零的扩展类型,否则任何其他类型都将很快不合适。

    07-24 09:27
    查看更多