
# 无符号整数类型
M-Compatibility支持的无符号整数类型如[表1]所示。
 表1无符号整数类型 
| 名称                                | 描述        | 存储空间 | 范围                                |
|:---|:---|:---|:---|
| TINYINT UNSIGNED \[ZEROFILL\]     | 无符号微整数    | 1字节  | \[0, 255\]                        |
| SMALLINT UNSIGNED \[ZEROFILL\]    | 无符号小范围整数  | 2字节  | \[0, 65,535\]                     |
| MEDIUMINT UNSIGNED \[ZEROFILL\]   | 无符号中等范围整数 | 4字节  | \[0, 16,777,215\]                 |
| INT/INTEGER UNSIGNED \[ZEROFILL\] | 无符号常用整数   | 4字节  | \[0, 4,294,967,295\]              |
| BIGINT UNSIGNED \[ZEROFILL\]      | 无符号大范围整数  | 8字节  | \[0, 18,446,744,073,709,551,615\] |
   
![](https://support.huaweicloud.com/distributed-m-comp-devg-v8-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
- sql_mode参数值包含"strict_trans_tables"时，无符号整数类型列输入负值，会报ERROR。
- sql_mode参数值包含"strict_trans_tables"时，无符号整数类型列输入非数值类型的字符，会报ERROR。
- sql_mode参数值不包含"strict_trans_tables"时，无符号整数类型列输入负值，会报WARNING信息，并返回数值0。
- sql_mode参数值不包含"strict_trans_tables"时，无符号整数类型列输入非数值类型的字符，会返回截断后的值。
- 支持无符号整数类型设置ZEROFILL属性：
  - 设置ZEROFILL属性时，会按照显示宽度在数值前添零。如果没有设置显示宽度，会按照数据类型的默认显示宽度作为具体显示宽度。例如，对于声明为INT(4) UNSIGNED ZEROFILL的列，将检索5的值作为0005。
  
  - 设置ZEROFILL属性时，将自动添加UNSIGNED属性。
   
 
#### 示例
```
-- 创建列类型为无符号整数类型的表。
m_db=# CREATE TABLE test_uint
(
    a TINYINT UNSIGNED, 
    b SMALLINT UNSIGNED,
    c MEDIUMINT UNSIGNED,
    d INTEGER UNSIGNED,
    e BIGINT UNSIGNED
);
-- 插入数据。
m_db=# INSERT INTO test_uint VALUES (100, 200, 300, 400, 500);
-- 查询表中的数据。
m_db=# SELECT * FROM test_uint;
  a  |  b  |  c  |  d  |  e
-----+-----+-----+-----+-----
 100 | 200 | 300 | 400 | 500
(1 row)
-- 严格模式下插入负值报错。
m_db=# SET SQL_MODE = 'strict_trans_tables,only_full_group_by,no_zero_in_date,no_zero_date,error_for_division_by_zero,
no_auto_create_user,no_engine_substitution';
SET
m_db=# INSERT INTO test_uint VALUES (-1, -1, -1, -1, -1);
ERROR:  unsigned tinyint out of range
CONTEXT:  referenced column: a
-- 宽松模式下插入负值提示warning，返回数值0。
m_db=# SET SQL_MODE = '';
SET
m_db=# INSERT INTO test_uint VALUES (-1, -1, -1, -1, -1);
WARNING:  unsigned tinyint out of range
CONTEXT:  referenced column: a
INSERT 0 1
m_db=# select * from test_uint;
 a | b | c | d | e
---+---+---+---+---
 0 | 0 | 0 | 0 | 0
(1 row)
-- 设置zerofill属性。
m_db=# DROP TABLE IF EXISTS t1;
DROP TABLE
m_db=# CREATE TABLE t1 (a int UNSIGNED zerofill);
CREATE TABLE
m_db=# INSERT INTO t1 VALUES(1);
INSERT 0 1
m_db=# SELECT * FROM t1;
     a      
------------
 0000000001
(1 row)
-- 删除表。
m_db=# DROP TABLE test_uint;
```
