深入解析 MySQL signed 类型

发布时间:2023-05-21

一、什么是 MySQL signed 类型

MySQL有好几种数据类型,其中包括数字类型。一个有符号整型(signed)是这些数字类型之一。在MySQL中,signed类型在存储负数时使用了二进制补码表示法,因此,signed类型的数据可以表示负数,零,和正数。

二、MySQL signed类型的范围

从技术上讲,MySQL中有许多不同大小的signed类型。下面是MySQL 8.0文档中SIGNED INT, SIGNED LONG, SIGNED BIG INT类型所能承受的范围:

Type Name     Bytes    Min (Signed)                      Max (Signed)
-----------+--------+---------------------------------+------------------------------------+
SIGNED INT  | 4 Bytes | -2,147,483,648 (-231)            | 2,147,483,647 (231 – 1)            |
-----------+--------+---------------------------------+------------------------------------+
SIGNED LONG | 8 Bytes | -9,223,372,036,854,775,808 (-263) | 9,223,372,036,854,775,807 (263 – 1) |
-----------+--------+---------------------------------+------------------------------------+
SIGNED BIG  | 8 Bytes | -9,223,372,036,854,775,808 (-263) | 9,223,372,036,854,775,807 (263 – 1) |
  INT       |        | (alias for SIGNED LONG INT)      |                                    |
-----------+--------+---------------------------------+------------------------------------+

三、MySQL signed类型的使用场景

大多数情况下使用MySQL中的整型,signed类型就可以满足需求。signed类型足以支持通常需要使用的范围内的数值类型,包括负值。signed类型的缺点是它们不支持大的数值范围。 当需要更大的数值范围时,使用MySQL的DOUBLE或DECIMAL类型通常会更好。这些数据类型可以表示更大的数字,但是它们会消耗更多的存储空间,并且在使用过程中更加复杂。

四、使用 MySQL signed 类型进行查询

在使用 MySQL 查询时,signed类型提供了非常有用的功能。通过使用符号,MySQL可以轻松地确定每个值是否为正数、负数或零。这使得在查询数据时,您可以编写更精确的选择条件。

SELECT * FROM table WHERE signed_column > 0;

上面的查询将只返回大于零的行。

SELECT * FROM table WHERE signed_column < 0;

这个查询将只返回小于零的行。

五、MySQL signed 类型的实际应用举例

现在,我们将在实际应用中看到signed类型如何用于构建数据库表格和执行查询。以下是一个完整的示例:

CREATE TABLE example_table (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50) NOT NULL,
    value SIGNED INT NOT NULL
);
INSERT INTO example_table (name, value)
VALUES ('Item 1', -10), ('Item 2', 0), ('Item 3', 20);

这将创建一张表,其中包含三个名称为Item 1、Item 2和Item 3的行,以及三个值为-10、0和20,分别使用了signed类型。 现在来运行几个查询:

SELECT * FROM example_table WHERE value < 0;

这将返回值小于零的行 :

+----+--------+-------+
| id | name   | value |
+----+--------+-------+
|  1 | Item 1 |  -10  |
+----+--------+-------+

同样,下面的查询将返回值大于零的行:

SELECT * FROM example_table WHERE value > 0;

这将返回标记为“Item 3”的行。 通过这个例子,可以看到使用MySQL的signed类型可以轻松地查询特定范围内的数字。不管是建立表格还是执行查询都可以使用它来获得更精确的结果。