首先,要知道int占用4个字节(4*8=32位)。而int的最大值为2^32=4294967295,如果有符号,则为2^31,由此可见,与mysql的int类型数字最大最小值一致。
mysql中int类型默认长度11,其中正负值占用了一个单位的长度,这里的长度仅代表数字的长度,即数字10长度为2,数字100长度为3,以此类推。其实这里长度只是展示的长度,与存储占用的多少无关,即int(1)和int(10)和int(11)的存储空间都是占用4字节,这里是完全一样的。
a)默认有正负值,只是如果勾选UNSIGNED无符号数,则int(3)或int(10)或int(11)的值范围变成0~4294967295
b)除非都加上ZEROFILL,会在数字前面补0
那么,varchar(4)呢(据说最大varchar(21845)),一般默认是utf-8格式:
a)假如存4个汉字,则占用4*3=12字节。
b)存4个字母,则占用4*1=4字节。
c)varchar会用一个或两个字节保存长度。即varchar(20)和varchar(255)对应的索引长度分别为20*3(utf-8)(+2+1),255*3(utf-8)(+2+1),其中"+2"用来存储长度信息,“+1”用来标记是否为空,加载索引信息时用varchar(255)类型会占用更多的内存; (备注:当字段定义为非空的时候,是否为空的标记将不占用字节)
d)硬盘上,varchar(100)和varchar(200)存储一个相同的字符串,实际是一样的,根据字符长度分配存储空间。但mysql在内存保存时,是使用固定大小的内存块保存值,就是使用字符类型中定义的长度,varchar(200)即200个字符空间。显然,这对于排序或者临时表(这些内容都需要通过内存来实现)作业会产生比较大的不利影响。详见
那么,char(4)呢?
a)从碎片角度进行考虑,使用CHAR字符型时,由于存储空间都是一次性分配的。为此某个字段的内容,其都是存储在一起的。单从这个角度来讲,其不存在碎片的困扰。而可变长度的字符数据类型,其存储的长度是可变的。当其更改前后数据长度不一致时,就不可避免的会出现碎片的问题。故使用可变长度的字符型数据时,数据库管理员要时不时的对碎片进行整理。如执行数据库导出导入作业,来消除碎片。
b)考虑其长度的是否相近,如果某个字段其长度虽然比较长,但是其长度总是近似的,如一般在90个到100个字符之间,甚至是相同的长度。此时比较适合采用CHAR字符类型。比较典型的应用就是MD5哈希值。当利用MD5哈希值来存储用户密码时,就非常使用采用CHAR字符类型。因为其长度是相同的。另外,像用来存储用户的身份证号码等等,一般也建议使用CHAR类型的数据。
另外请大家考虑一个问题,CHAR(1)与VARCHAR(1)两这个定义,会有什么区别呢?虽然这两个都只能够用来保存单个的字符,但是VARCHAR要比CHAR多占用一个存储位置。这主要是因为使用VARCHAR数据类型时,会多用1个字节用来存储长度信息。这个管理上的开销char字符类型是没有的。
varchar和char,二者在磁盘上存储占的空间是一样的。区别有二。第一、一个变长一个固定长度。第二、在内存中的操作方式,varchar也是按照最长的方式在内存中进行操作的。比如说要进行排序的时候,varcahr(100)是按照100这个长度来进行的。
附带参考:
ASCII码:一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间。一个二进制数字序列,在计算机中作为一个数字单元,一般为8位二进制数,换算为十进制。最小值-128,最大值127。如一个ASCII码就是一个字节。 UTF-8编码:一个英文字符等于一个字节,一个中文(含繁体)等于三个字节。中文标点占三个字节,英文标点占一个字节。 Unicode编码:一个英文等于两个字节,一个中文(含繁体)等于两个字节。中文标点占两个字节,英文标点占两个字节。
相关推荐
总的来说,MySQL中的int、char和varchar在性能上的差异并非显著到足以成为决定性因素。开发者应根据实际需求,如数据的类型、大小、预期的增长、是否需要索引以及对可读性和可维护性的要求,来综合考虑选择哪种数据...
在MySQL中,日期和时间数据类型的处理是数据库操作中的常见任务。然而,有时出于特定需求,我们可能需要将日期存储为整型,比如Unix时间戳。这种情况下,我们需要掌握将整型日期转换为日期类型,以及反之转换的方法...
### MySQL INT 和 TINYINT 的区别 #### 一、INT 和 TINYINT 概述 在MySQL中,`INT` 和 `TINYINT` 是两种常见的整数类型,它们主要用于存储整数值。这两种类型的差异主要体现在存储空间的需求、能够表示的数值范围...
mysql的配置文件 具体安装见:https://blog.csdn.net/qq_31787603/article/details/81206033
mysql int(3)与int(11)的区别 总结,int(M) zerofill,加上zerofill后M才表现出有点点效果,比如 int(3) zerofill,你插入到数据库里的是10,则实际插入为010,也就是在前面补充加了一个0.如果int(3)和int(10)不加...
MySQL中的整数类型主要包括四种:`tinyint`、`smallint`、`int`和`bigint`,它们各自有不同的取值范围和存储需求,适用于不同的应用场景。 1. `tinyint`: `tinyint`是一种非常小的整数类型,主要用于存储只需要1...
在MySQL数据库中,整数类型是用于存储数值数据的关键元素,包括`INT`在内的各种整数类型都有着不同的存储范围和用途。本篇文章将深入讲解`INT`类型的最大值及其背后的原理。 首先,我们要理解计算机存储的基本单位...
《MySQL数据库应用》实验训练1主要关注如何在MySQL环境中创建数据库和表,这是数据库管理的基础操作,对于学习数据库管理和应用开发至关重要。 首先,要进行实验训练,你需要确保你的计算机满足MySQL的运行环境。...
整型是MySQL中最常用的字段类型之一,通常用于存储整数,其中int是整型中最常用的,对于int类型你是否真正了解呢?本文会带你熟悉int类型相关知识,也会介绍其他整型字段的使用。 1.整型分类及存储范围 整数类型 ...
1. **数据类型**:数值类型的索引(如`int`)通常比字符串类型的索引(如`varchar`)更快,因为它们在存储和比较时占用更少的空间。 2. **排序顺序**:对于字符串类型,索引的排序基于字符集,可能需要更多计算来...
刚接触 MySQL 的时候,我还以为 int(3) 占用的存储空间比 int(4) 要小, int(4) 占用的存储空间比 int(8) 小。 后来,参看 MySQL 手册,发现自己理解错了。 int(M): M indicates the maximum display width for ...
这个"QT MySQL vchar int picture demo"是一个示例项目,它演示了如何在QT C++环境中使用MySQL数据库进行文本(vchar)、整数(int)以及图片数据的读写操作。下面我们将详细探讨相关的知识点。 1. **QT框架**:QT...
MySQL创建存储过程批量插入10万条数据 存储过程 1、首先防止主键冲突,我们清空表。 TRUNCATE table A_student; 2、编写存储过程 delimiter ‘$’; CREATE PROCEDURE batchInsert(in args int) BEGIN declare i int ...
一、date型转换成int型 UNIX_TIMESTAMP(‘1997-10-04 22:23:00’) =====> 875996580 二、int型转换成date型 FROM_UNIXTIME...以上就是小编为大家带来的mysql日期date型和int型互换的方法全部内容了,希望大家
本资源摘要信息介绍了 MySQL 中创建数据库和表的基本操作步骤,并对每个步骤进行了详细的解释。 一、查看当前存在的数据库 在 MySQL 中,使用 `show databases;` 语句可以查看当前服务器上存在的所有数据库。这个...
Java 和 MySQL 数据类型之间的对比是理解数据库操作和应用程序开发中数据处理的关键。这两种语言的数据类型在功能和使用上都有所不同,尽管它们都用于存储和处理数据,但各自有着特定的适用场景和特点。 首先,Java...