MySQL 中的“unsigned”是什么?

MySQL 中的“unsigned”是什么?

MySQL 中的“unsigned”是一个数据类型修饰符,可以用来修饰整数类型数据。在 MySQL 中,整数类型包括:TINYINT、SMALLINT、MEDIUMINT、INT 和 BIGINT,这些类型均可以被设置为 “unsigned”。

阅读更多:MySQL 教程

如何将整数类型设置为 “unsigned”

在 MySQL 中,设置整数类型为 “unsigned” 很简单,只需要在创建表时,在数据类型后添加关键字 “unsigned” 即可。示例如下:

CREATE TABLE test_table (
    id INT UNSIGNED PRIMARY KEY,
    age TINYINT UNSIGNED NOT NULL,
    money BIGINT UNSIGNED
);

以上代码中,整数类型的数据加上 “unsigned” 关键字,表示它们的数据范围都是正整数,而没有负整数。如 TINYINT UNSIGNED 的数据范围为 0~255,而 TINYINT 的数据范围为 -128~127。

在添加数据时,也需要针对整数类型是 “unsigned” 进行特别处理,否则会出现数据插入错误。示例如下:

INSERT INTO test_table (id, age, money) VALUES (1, -10, 2000);

以上代码中,age 字段的数据类型是 TINYINT UNSIGNED,但是插入的数据是一个负整数 -10,会提示以下错误:

Error Code: 1264. Out of range value for column 'age' at row 1

这是因为 TINYINT UNSIGNED 只能存储 0~255 的正整数,而不能存储负数或超出范围的数。

“unsigned” 带来的好处

将整数类型设置为 “unsigned” 有许多好处,包括:

  1. 存储空间:当整数类型设为 “unsigned” 时,存储空间会减半。因为原来会使用一位来表示符号位,但是这位符号位是可推导的,并不需要存储。比如,当 INT 类型存储 -2147483648~2147483647 时,需要 4 字节,而 INT UNSIGNED 类型只需要 4 字节存储 0~4294967295 的范围。

  2. 数据范围:设置整数类型为 “unsigned” 可以将数据范围从原来的 -2^n~2^n-1 扩大到 0~2^n-1,从而可以存储更大的数据范围。

注意事项

  1. 如果设置整数类型为 “unsigned”,那么在进行各种计算时,也要注意整数溢出的问题。
SELECT 250 * 2;

以上代码中,如果 250 被定义为 TINYINT UNSIGNED 类型,则结果为 0,因为 TINYINT UNSIGNED 最大只能存放到 255,250 * 2 的结果是 500,超出了数据范围,会自动截断为 244。

  1. 当对整数类型做减法时,两边的整数类型要一致。
SELECT -1 + 10;

以上代码中,如果 -1 被定义为 TINYINT UNSIGNED 类型,则结果会出错,因为无法对无符号数做减法。正确写法如下:

SELECT 255 + (-1) + 10;

结论

在 MySQL 中,将整数类型设置为 “unsigned” 可以节省存储空间,并且扩大数据范围,但是要注意整数溢出和减法操作的问题,以避免错误发生。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程