yuan-er

导航

 

表1列出了所有的可用类型。数字操作符和相关的内置函数请参见数字操作函数和操作符

表1 整数类型

名称

描述

存储空间

范围

TINYINT [UNSIGNED]

微整数,带符号别名为INT1,无符号别名为UINT1。

1字节

  • 带符号的范围是0 ~ +255。
  • 无符号的范围是0 ~ +255。
  • 当sql_compatibility = 'MYSQL'时,设置参数b_format_version = '5.7'和参数b_format_dev_version = 's1'后,带符号的范围是-128 ~ +127。

SMALLINT [UNSIGNED]

小范围整数,带符号别名为INT2,无符号别名为UINT2。

2字节

  • 带符号的范围是-32,768 ~ +32,767。
  • 无符号的范围是0 ~ +65,535。

MEDIUMINT [UNSIGNED]

中等范围整数,带符号别名为INT4,无符号别名为UINT4。

4字节

  • 带符号的范围是-2,147,483,648 ~ +2,147,483,647。
  • 无符号的范围是0 ~ +4,294,967,295。

INTEGER [UNSIGNED]

常用的整数,带符号别名为INT4,无符号别名为UINT4。

4字节

  • 带符号的范围是-2,147,483,648 ~ +2,147,483,647。
  • 无符号的范围是0 ~ +4,294,967,295。

BINARY_INTEGER

常用的整数,带符号别名为INTEGER。

4字节

-2,147,483,648 ~ +2,147,483,647。

BIGINT [UNSIGNED]

大范围的整数,带符号别名为INT8,无符号别名为UINT8。

8字节

  • 带符号的范围是-9,223,372,036,854,775,808 ~ +9,223,372,036,854,775,807。
  • 无符号的范围是0 ~ +18,446,744,073,709,551,615。

INT16 [SIGNED]

十六字节的大范围整数,目前不支持用户用于建表等使用。

16字节

-170,141,183,460,469,231,731,687,303,715,884,105,728 ~ +170,141,183,460,469,231,731,687,303,715,884,105,727。

说明:
  • 当sql_compatibility = 'MYSQL'时,设置参数b_format_version = '5.7'和参数b_format_dev_version = 's1'后,整型支持显示宽度和指定ZEROFILL属性。
  • 显示宽度不限制可以存储在列中的值的范围,也不会阻止宽于列显示宽度的值正确显示。例如,指定为SMALLINT(3)的列可以存储-32768到32767的SMALLINT范围的值,并且使用三位以上的数字完整显示三位数所允许的范围之外的值。
  • 当显示宽度与ZEROFILL属性结合使用时,将在数值前填充零以达到显示宽度。例如,对于声明为INT(4) ZEROFILL的列,将检索5的值作为0005。
  • 如果为数字列指定ZEROFILL,将自动添加UNSIGNED属性。
  • 如果不为数字列指定ZEROFILL,仅指明宽度信息,则宽度信息在表结构描述中不显示。

示例:

--创建数据库。
gaussdb=# CREATE DATABASE b_database dbcompatibility = 'MYSQL';
gaussdb=# \c b_database
 
 
--创建具有TINYINT类型数据的表。
b_database=# CREATE TABLE int_type_t1
           (
            IT_COL1 TINYINT,
            IT_COL2 TINYINT UNSIGNED
           );

--插入数据。
b_database=# INSERT INTO int_type_t1 VALUES(10,20);

--查看数据。
b_database=# SELECT * FROM int_type_t1;
it_col1 | it_col2
--------+---------
     10 |      20
(1 row)

--删除表。
b_database=# DROP TABLE int_type_t1;
 
 
--创建具有TINYINT,INTEGER,BIGINT类型数据的表。
b_database=# CREATE TABLE int_type_t2 
(
    a TINYINT, 
    b TINYINT,
    c INTEGER,
    d INTEGER UNSIGNED,
    e BIGINT,
    f BIGINT UNSIGNED
);

--插入数据。
b_database=# INSERT INTO int_type_t2 VALUES(100, 10, 1000, 10000, 200, 2000);

--查看数据。
b_database=# SELECT * FROM int_type_t2;
  a  | b  |  c   |   d    |  e  |  f
-----+----+------+--------+-----+------
 100 | 10 | 1000 |  10000 | 200 | 2000
(1 row)

--删除表。
b_database=# DROP TABLE int_type_t2;

--删除数据库。
b_database=# \c postgres
gaussdb=# DROP DATABASE b_database;
 
 
说明:
  • TINYINT、SMALLINT、INTEGER、BIGINT和INT16类型存储各种范围的数字,即整数。如果存储超出范围以外的数值将会导致错误。
  • 如果指定UNSIGNED,将不允许使用负值。
  • 常用的类型是INTEGER,因为它提供了在范围、存储空间、性能之间的最佳平衡。一般只有取值范围确定不超过SMALLINT的情况下,才会使用SMALLINT类型。而只有在INTEGER的范围不够的时候才使用BIGINT,因为INTEGER的处理速度相对快得多。
  • 无符号数值类型仅支持sql_compatibility = 'MYSQL'时的行存储引擎中使用。
  • 当在整数值(其中一个是UNSIGNED类型)之间使用减号、加号、乘号时,结果是无符号。
  • INT1/UINT1/UINT2/UINT4/UINT8的+、-、*运算允许返回值超过类型本身范围,INT2/INT4/INT8的+、-、*运算不允许返回值超过类型本身范围。
  • UNSIGNED类型不支持与SET数据类型间的转换,避免对UNSIGNED类型与SET类型计算或比较。
  • 当sql_compatibility = 'MYSQL'时,非数值类型的字符输入,会自动截断或返回数值0。

更多详情请参考GaussDB 文档中心:https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/24.1.30/productdesc/qlh_03_0001.html

 

posted on 2025-05-30 08:58  数据库笔记  阅读(11)  评论(0)    收藏  举报