GBase 8S 数据类型
GBase 8S 数据类型是南大通用数据库 GBase 8S 中的基础组件之一。它规定了一个属性的取值范围,直接对应于关系模型中域的概念。关系中的每个属性必须来自于一个域。相应地,表中每个列的取值必须符合定义表时指定的数据类型。
GBase 8S 数据类型可以分为五类:数值类型、时间类型、字符类型、大对象和布尔型。
1. 数值类型(Numeric)
数值类型用于存储整数或浮点数。GBase 8S 提供了多种数值类型,包括:
* INTEGER/INT4:4 字节,范围为 -(231-1) ~ 231-1。
* INT8 or BIGINT8:8 字节,范围为 -(263-1) ~ 263-1。
* BIGINT:优于 INT8。
* SMALLINT:2 字节,范围为 -(215-1) ~ 215-1。
* SERIAL4:4 字节,范围为 1 ~ 231-1,由服务器自动递增。
* SERIAL8 or BIGSERIAL8:8 字节,范围为 1 ~ 263-1,由服务器自动递增。
* BIGSERIAL:优于 SERIAL8。
* FLOAT or DOUBLE PRECISION:双精度浮点数,有 16 个有效位。
* SMALLFLOAT or REAL:单精度浮点数,有 8 个有效位。
* DECIMAL(p,s) or NUMERIC(p,s):定点小数,其中的‘p’是总位数,‘s’是小数点右边的位数。
* MONEY(p,s):货币值,与 DECIMAL 相似,用货币字符型进行格式化。
2. 字符类型
字符类型用于存储字符串。GBase 8S 提供了多种字符类型,包括:
* CHAR(n) / CHARACTER(n):定长的字符串,n 为字符串长度,默认为 1 字节。如果长度小于 n,那么用空格填充至 n 个字符。n 的最大值为 32767。
* VARCHAR(n,r) / CHARACTER VARYING(n,r):长度可变的字符串,n 为最大字节长度,r 是最小保留空间;如果存储的值的长度小于 r,那么用空格填充至 r 个字符;如果存储的值的长度大于 r 但小于 n,那么只占用存储数据所需的空间。n 的最大值为 255。
* LVARCHAR(n):长度可变的字符串,n 为最大字节长度,默认为 2048 字节。只使用存储数据所需的空间,n 的最大值为 32729。
* NCHAR(n):定长的字符串,包括使用 Global Language Support(GLS) 存储由数据库地区决定的单字节和多字节字符集;还允许使用本地的整理次序。
* NVARCHAR(n,r):长度可变的字符串,参数含义同 VARCHAR,具有与 NCHAR 相似的特殊性质。
如何选择 char 还是 varchar?Char(1) 占用 1 字节,而 varchar(1) 占用 2 字节。固定长度的情况选择 char,N<20 且变化不大的情况选择 char,特别是需要创建 index 的字段,应该选择 char;实际数据长度变化较大的情况使用 varchar。
3. 时间类型
时间类型用于存储日期和时间。GBase 8S 提供了多种时间类型,包括:
* Date:默认格式为 MM/DD/YYYY,可以通过 GL_DATE 环境变量修改。
* DATETIME:日期时间,默认格式为 YYYY-MM-DD HH:MM:SS.FFF,可以通过 GL_DATETIME 环境变量修改格式:Datetime year to second,Datetime year to fraction(5)。
* INTERVALS:时间跨度,格式与 DATETIME 相同。
4. 大对象
大对象用于存储大规模的数据。GBase 8S 提供了多种大对象类型,包括:
* BYTE:最大为 2GB。
* TEXT:最大为 2GB。
* BLOB:二进制大对象,最大为 4TB,用于存储二进制数据。
* CLOB:字符大对象,最大为 4TB,用于文本数据。
5. 布尔型
布尔型用于存储 True 或 False 值。GBase 8S 的布尔型为 BOOLEAN,值为 ‘t’ 或 ’f’。