当我们在设计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数据类型的不同大小有一些帮助。
The End


大气响应式网络建站服务公司织梦模板
高端大气html5设计公司网站源码
织梦dede网页模板下载素材销售下载站平台(带会员中心带筛选)
财税代理公司注册代理记账网站织梦模板(带手机端)
成人高考自考在职研究生教育机构网站源码(带手机端)
高端HTML5响应式企业集团通用类网站织梦模板(自适应手机端)