整数类型为定长、精确的数值类型,值域取决于类型长度,以及是否为无符号,Precision 只表示最小显示宽度。
OceanBase 数据库所支持的每种整数类型所需的存储长度和值域如下表所示。
| 类型 | 长度(字节) | 值域(有符号) | 值域(无符号) |
|---|---|---|---|
BOOL/BOOLEAN/TINYINT | 1 | [-27, 27 - 1] | [0, 28 - 1] |
SMALLINT | 2 | [-215, 215 - 1] | [0, 216 - 1] |
MEDIUMINT | 3 | [-223, 223 - 1] | [0, 224 - 1] |
INT/INTEGER | 4 | [-231, 231 - 1] | [0, 232 - 1] |
BIGINT | 8 | [-263, 263 - 1] | [0, 264 - 1] |
TINYINT
TINYINT 用于表示一个非常小的整数。语法如下:
TINYINT[(M)] [UNSIGNED] [ZEROFILL]
M 表示最大显示宽度。最大显示宽度为 255。显示宽度与可以存储的值范围无关。如果为数值列指定 ZEROFILL,OceanBase 数据库会自动向该列添加 UNSIGNED 属性。
BOOL/BOOLEAN
BOOL/BOOLEAN 类型是 TINYINT 的同义词。零值表示错误,非零值表示正确。
示例如下:
obclient> SELECT IF(0, 'true', 'false');
+------------------------+
| IF(0, 'true', 'false') |
+------------------------+
| false |
+------------------------+
1 row in set
obclient> SELECT IF(1, 'true', 'false');
+------------------------+
| IF(1, 'true', 'false') |
+------------------------+
| true |
+------------------------+
1 row in set
obclient> SELECT IF(2, 'true', 'false');
+------------------------+
| IF(2, 'true', 'false') |
+------------------------+
| true |
+------------------------+
1 row in set
obclient> SELECT IF(2 = FALSE, 'true', 'false');
+--------------------------------+
| IF(2 = FALSE, 'true', 'false') |
+--------------------------------+
| false |
+--------------------------------+
1 row in set
SMALLINT
SMALLINT 用于表示一个小值整数。语法如下:
SMALLINT[(M)] [UNSIGNED] [ZEROFILL]
M 表示最大显示宽度。最大显示宽度为 255。显示宽度与可以存储的值范围无关。如果为数值列指定 ZEROFILL,OceanBase 数据库会自动向该列添加 UNSIGNED 属性。
MEDIUMINT
MEDIUMINT 用于表示一个中等大小的整数。
语法如下:
MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL]
M 表示最大显示宽度。最大显示宽度为 255。显示宽度与可以存储的值范围无关。如果为数值列指定 ZEROFILL,OceanBase 数据库会自动向该列添加 UNSIGNED 属性。
INT/INTEGER
INT 或 INTEGER 用于表示一个正常大小的整数。语法如下:
INT[(M)] [UNSIGNED] [ZEROFILL]
INTEGER[(M)] [UNSIGNED] [ZEROFILL]
M 表示最大显示宽度。最大显示宽度为 255。显示宽度与可以存储的值范围无关。如果为数值列指定 ZEROFILL,OceanBase 数据库会自动向该列添加 UNSIGNED 属性。
另外,OceanBase 数据库还支持扩展类型 INT2 和 INT4,但是推荐使用 INT 替换 INT4。
BIGINT
BIGINT 用于表示一个大整数。语法如下:
BIGINT[(M)] [UNSIGNED] [ZEROFILL]
M 表示最大显示宽度。最大显示宽度为 255。显示宽度与可以存储的值范围无关。如果为数值列指定 ZEROFILL,OceanBase 数据库会自动向该列添加 UNSIGNED 属性。
关于 BIGINT,需要注意以下事项:
所有运算需要使用有符号的
BIGINT或DOUBLE值,因此不应使用大于 9223372036854775807(63 位)的无符号大整数,BIT函数除外。否则,在将BIGINT值转换为DOUBLE时会出现舍入错误,导致结果中的最后一位数字可能出错。通过使用字符串存储
BIGINT,这样始终可以将精确的整数值存储在BIGINT列中。在这种情况下,在执行字符串到数字的转换时,不涉及双精度的中间转换。当两个操作数都是整数值时,-、+ 和 * 运算符使用
BIGINT运算。如果将两个大整数(或函数返回的整数结果)相乘,当结果大于 9223372036854775807 时可能会得到异常的结果。




