选择数据类型

表中的每一列都必须具有数据类型。由于下列原因,数据类型的选择至关重要:

下图显示了决策树,此决策树概述了在内置数据类型之间所作的选择。下列各节对这些选择作了说明。

图: 选择数据类型


如果数据是布尔值(true 或 false),那么使用 BOOLEAN。如果数据仅由整数组成,那么要使用的类型将取决于所需值的范围。如果所有数字都在 -2 的 15 次方减 1 到 2 的 15 次方减 1 之间,那么使用 SMALLINT。 如果部分值在该范围之外,但是所有值都在 -2 的 31 次方减 1 到 2 的 31 次方减 1 之间,那么使用 INTEGER。如果部分值在该范围之外,但是所有值都在 -2 的 64 次方减 1 到 2 的 64 次方减 1 之间,那么使用 INT8。如果部分值在该范围之外,那么使用 DECIMAL(p,0)。 如果并非所有值都是整数,并且每个值的小数位数为固定,那么使用 DECIMAL(p,s)。 如果并非所有值都是整数,并且每个值的小数位数不固定,那么根据有效数字的最大数使用 SMALLFLOAT、FLOAT 或 DECIMAL(p)。如果始终没有超过 8 位有效数字,那么使用 SMALLFLOAT。如果有时超过 8 位有效数字但是始终没有超过 16 位有效数字,那么使用 FLOAT。如果有过超过 16 位的有效数字,那么使用 DECIMAL(p)。 如果数据是时间值并且表示时间跨度而不是具体时间点,那么使用 INTERVAL。如果数据是时间值并且表示一个时间点,那么使用 DATE 或 DATETIME。 如果数据精确到天,那么使用 DATE;否则使用 DATETIME。 如果数据包含非英语字符,那么使用 NCHAR(n) 或 NVARCHAR(m,r)。如果项长度无变化或变化甚微,那么使用 NCHAR(n);否则使用 NVARCHAR(m,r)。 如果数据由 ASCII 字符构成并且项长度无变化或变化甚微,那么使用 CHAR(n)、CLOB 或 TEXT。如果没有任何项的长度超过 32766 字节,那么使用 CHAR(n);否则,如果需要随机访问数据(读或写数据的任何部分),那么使用 CLOB,如果不需要,那么使用 TEXT。如果数据由 ASCII 字符构成,但是项的大小变动明显,那么在任一长度超过 255 字节时,使用 LVARCHAR;否则使用 VARCHAR(m,r) 或其同义词 CHARACTER VARYING(m,r)。 如果数据的某个部分不是 ASCII,那么在必须随机访问数据时使用 BLOB;否则使用 BYTE。

图: 选择数据类型(续)


开始图描述 - 在环境文本中对此图进行了描述。- 结束图描述