详细深入聊一聊Mysql中的int(1)和int(11)

当我们在设计MySQL表时,常常会使用int类型作为列的数据类型,但是int还可以指定长度,比如int(1)和int(11)两种类型。在这里,我们来深入聊一聊它们之间的不同。

int(1)与int(11)的区别

事实上,int(1)和int(11)在存储数据时并没有真正的差异,它们都占据四个字节的存储空间,存储的范围也一样。它们的唯一区别在于,int(1)在显示时会被截断成只显示一位数字,而int(11)则可以完整显示出所有的数字。

int(1)的示例

接下来,我们用一个简单的示例来说明int(1)的作用。

创建一个employee表,用int(1)作为员工性别的数据类型:

CREATE TABLE employee (
  id int(11) NOT NULL AUTO_INCREMENT,
  name varchar(50) NOT NULL,
  gender int(1),
  PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

接下来插入一些员工信息:

INSERT INTO employee (name, gender) VALUES
('Tom', 1),
('Jerry', 0),
('Alice', 2);

接着我们查看表中的数据:

SELECT * FROM employee;

结果如下:

| id | name   | gender |
|----|--------|--------|
| 1  | Tom    | 1      |
| 2  | Jerry  | 0      |
| 3  | Alice  | 2      |

由于gender字段的数据类型是int(1),所以JDBC在插入数据时会把0和1都当作Boolean类型的数据,所以实际存储的值为0或1。这也是我们不建议使用int(1)作为Boolean类型的原因之一。

但是,当我们使用SQL语句查询时,MySQL会把gender字段的值自动转换成字符串类型,如果是0或1,会显示为'0'和'1',如果是其他值,则会显示为该值本身。

int(11)示例

接下来我们用一个示例来说明int(11)的作用。

创建一个sales表,用int(11)作为订单金额的数据类型:

CREATE TABLE sales (
  id int(11) NOT NULL AUTO_INCREMENT,
  name varchar(50) NOT NULL,
  amount int(11),
  PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

接下来插入一些订单数据:

INSERT INTO sales (name, amount) VALUES
('Tom', 80000),
('Jerry', 90000),
('Alice', 50000);

我们可以使用下面的SQL语句查询所有订单的金额:

SELECT * FROM sales;

结果如下:

| id | name   | amount  |
|----|--------|---------|
| 1  | Tom    | 80000   |
| 2  | Jerry  | 90000   |
| 3  | Alice  | 50000   |

由于amount字段的数据类型是int(11),所以MySQL会把所有的数字都完整地显示出来。

结论

根据上面的示例,我们得出以下结论:

  • int(1)在存储时和int(11)没有实际区别,它们占用的存储空间是一样的;
  • int(1)可以被当做Boolean类型来使用,但要注意在查询时可能会出现一些问题;
  • int(11)在存储数值时可以完整显示出所有的数字,比如订单金额等需要精确到分的数字,适合使用int(11)。

希望本文能够对大家了解关于int数据类型的不同大小有一些帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详细深入聊一聊Mysql中的int(1)和int(11) - Python技术站

(0)
上一篇 2023年5月18日
下一篇 2023年5月18日

相关文章

  • C#利用GDI绘制常见图形和文字

    C#利用GDI绘制常见图形和文字攻略 简介 GDI(Graphics Device Interface)是Windows图形设备接口,提供了一系列绘制函数,使用GDI可以实现对Windows图形界面的高级控制。C#通过PInvoke方法可以调用GDI的各个函数,通过GDI实现绘制图形和文字,可用于Windows窗体界面设计。本攻略将介绍如何使用C#和GDI绘…

    database 2023年5月21日
    00
  • 详解在Windows环境下访问linux虚拟机中MySQL数据库

    针对如何在Windows环境下访问Linux虚拟机中MySQL数据库,我提供以下的攻略步骤: 步骤一:下载并安装虚拟机管理软件 虚拟机管理软件是指用来创建和管理虚拟机的软件,我们可以在Windows下下载并安装 VMware Workstation 或者 VirtualBox 软件。这里以 VMware Workstation 为例: 前往 VMware 官…

    database 2023年5月22日
    00
  • MySQL中的游标和绑定变量

    MySQL中的游标和绑定变量是数据库中非常重要的概念,对于处理需要在多行之间进行交互的数据非常有用。游标用于遍历结果集,绑定变量则可以有效地降低重复查询的开销。 游标(Cursor) 在MySQL中,游标是一种可以遍历结果集的机制,可以让用户一行一行地处理数据。在使用游标之前,必须先声明它,并将结果集中的数据赋值给游标。然后,用户可以利用游标,按照行进行处理…

    database 2023年5月21日
    00
  • SQLServer2005安装提示服务无法启动原因分析及解决

    那么首先需要明确的是,出现“SQLServer2005安装提示服务无法启动”的错误提示,通常的原因之一是因为计算机缺失必要的组件或者服务未启用。因此,我们需要完成以下步骤来解决这个问题: 步骤一:检查必要的组件是否已安装 在开始安装 SQL Server 2005 之前,我们需要检查计算机上是否已经安装了以下组件: .NET Framework 2.0 或更…

    database 2023年5月21日
    00
  • redis反序列化报错如何解决

    这篇文章主要介绍“redis反序列化报错如何解决”,在日常操作中,相信很多人在redis反序列化报错如何解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”redis反序列化报错如何解决”的疑惑有所帮助!接下来,请跟着小编一起来学习吧! redis反序列化报错原因分析 问题:Cannot deserialize,无法反序列化 分…

    Redis 2023年4月10日
    00
  • 关于Java中的mysql时区问题详解

    标题:关于Java中的Mysql时区问题详解 正文: 背景 在使用Java访问Mysql数据库时,我们经常会遇到时区问题。比如我们插入一个带有时间的数据到Mysql数据库中,但是实际存储到数据库中的时间和我们传入的时间不符。这是因为Java和Mysql在处理时间数据时,涉及到时区的转换问题。 时区概念 在开始讲解时区问题前,我们先来了解一下时区概念。时区是指…

    database 2023年5月22日
    00
  • 解决sqoop从postgresql拉数据,报错TCP/IP连接的问题

    这里是解决sqoop从postgresql拉数据报错TCP/IP连接的问题的完整攻略。 问题原因 在使用sqoop向postgresql数据库导入数据时,可能会遇到“TCP/IP连接超时”的错误提示,这通常是由于数据库不支持TCP/IP网络连接所导致的。 解决方案 要解决这个问题,我们需要在postgresql数据库中开启TCP/IP网络连接,具体步骤如下:…

    database 2023年5月18日
    00
  • 在Mysql存储过程中使用事务实例

    当在 Mysql 存储过程中执行一系列 SQL 语句时,可能会遇到一些不符合预期的结果。在这种情况下,使用事务可以保证这些 SQL 语句将作为一个原子操作执行,要么全部生效,要么全部回滚。下面是一份针对在 Mysql 存储过程中使用事务的攻略: 1. 创建一个简单的存储过程 在这个示例中,我们将创建一个简单的存储过程,它将插入两条记录到一个名为 users …

    database 2023年5月21日
    00
合作推广
合作推广
分享本页
返回顶部