mysql里整型 和 占用 字节 表

在MySQL中,整型数据类型及其所占用的字节大小取决于具体的数据类型。以下是一个整型数据类型及其字节占用的概览:

数据类型 字节占用 范围
TINYINT 1 字节 -128 到 127 或者 0 到 255 (无符号)
SMALLINT 2 字节 -32,768 到 32,767 或者 0 到 65,535 (无符号)
MEDIUMINT 3 字节 -8,388,608 到 8,388,607 或者 0 到 16,777,215 (无符号)
INT, INTEGER 4 字节 -2,147,483,648 到 2,147,483,647 或者 0 到 4,294,967,295 (无符号)
BIGINT 8 字节 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 或者 0 到 18,446,744,073,709,551,615 (无符号)

注意:

  • 这些数据类型可以指定为有符号(默认)或无符号。无符号意味着它们不能表示负数,但可以将正数范围翻倍。
  • 当你定义一个整型字段时,MySQL 会根据你所选择的数据类型来分配相应的存储空间。
  • 在选择数据类型时,应根据实际需要选择最小的数据类型以节省存储空间,并确保该数据类型能够容纳你的数据范围。

例如,如果你知道某个字段的值永远不会超过255,你可以选择使用TINYINT数据类型,而不是INT或BIGINT,以节省存储空间。如果你需要存储的数据可能会非常大,超出了INT的范围,那么你应该选择BIGINT。

img

整型长度(或叫显示宽度)的问题,以int举例

在MySQL中,INT 数据类型用于存储整数。它有一个可选的“宽度”或“显示宽度”参数,这经常会引起一些混淆。这个“宽度”不是用来限制整数的最大值或表示存储大小的,而是用于显示的。

例如,当你创建一个带有“宽度”的 INT 字段时,如 INT(5),这个“5”是一个显示宽度。这意味着,当你使用某些客户端(如MySQL命令行客户端)查询数据时,该字段的值将尝试使用至少5个字符的宽度来显示。如果值的实际长度小于这个宽度,那么它可能会在左边用零来填充(这取决于是否设置了 ZEROFILL 选项)。

但重要的是要理解以下几点:

  1. 存储大小和范围:不论你设置的“宽度”是多少,INT 类型在MySQL中总是使用4个字节的存储空间,并且它的范围是从-2,147,483,648到2,147,483,647(对于无符号整数,范围是0到4,294,967,295)。
  2. ZEROFILL:如果你为 INT 字段指定了 ZEROFILL,那么MySQL会自动为该字段添加前导零,直到达到指定的显示宽度。但请注意,这仅仅是为了显示目的。
  3. 索引和性能:显示宽度与索引或查询性能无关。

总的来说,INT 的“宽度”主要是为了在某些客户端上显示时的格式化目的。它不影响数据的存储、范围或性能。如果你不需要特定的显示格式,通常可以忽略这个宽度设置。

举例:

img

img

结论:int(11) int(3) int(20) 若不勾选填充0,那么效果统统一样,若勾选了填充0;查询出来的效果 会是这样:

  • int(11) 00000000123

  • int(3) 123

  • int(20) 00000000000000000123

仅仅是显示出来的效果不同,存储的方式都是一样,且这个填充0经常用不到。通常默认 int(11) 就可。

MySQL中的boolean类型 - tinyint(1)

既然上面说了 tinyint(m) 这个m仅仅是 显示宽度,与存储没有关系;tinyint(1) 有个特殊用法,可以视作boolean类型;

看博客:https://www.cnblogs.com/del88/p/12538470.html

在 MySQL 8 中,没有一个专门的 BOOLEAN 数据类型。但是,MySQL 通过使用 TINYINT 类型来表示布尔值。这是因为 TINYINT 是一个占用一个字节的整型,可以存储从 -128 到 127 的整数值。当你将一个字段定义为 BOOLEAN 时,MySQL 实际上是将它视为 TINYINT(1)。这里的 (1) 并不限制存储的数值范围,只是表示该字段在显示时的一个宽度提示。

在实践中,你可以使用 BOOLEANBOOL 关键字来定义布尔字段,但请记住,在 MySQL 中这些最终会被解释为 TINYINT 类型。通常,开发者会使用 0 表示 FALSE,1 表示 TRUE

例如,以下两个语句在 MySQL 中是等价的,都会创建一个名为 is_active 的字段,其数据类型为 TINYINT(1):

CREATE TABLE my_table (
    id INT AUTO_INCREMENT,
    is_active BOOLEAN,
    PRIMARY KEY (id)
);
CREATE TABLE my_table (
    id INT AUTO_INCREMENT,
    is_active TINYINT(1),
    PRIMARY KEY (id)
);

所以,虽然 MySQL 8 没有原生的 BOOLEAN 类型,但你可以通过 TINYINT 类型来实现布尔值的存储,并且可以使用 BOOLEANBOOL 语法来让 SQL 语句更具可读性。

posted on 2020-05-13 14:22  del88  阅读(2324)  评论(0编辑  收藏  举报