首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

mysql数据类型及占用字节数【mysql

3,smallint 类型 2字节 4,mediumint 类型 3字节 5,bigint 类型 8字节 6,float 类型 4字节 单精度浮点数 7,double 类型 8字节 双精度浮点数...double占用的内存是float的两倍,所以float的运算速度要快,可能的条件下尽可能的使用float。...二、字符串类型 char 类型 M字节,1 <= M <= 255 varchar 类型 L+1 字节, 在此L <= M和1 <= M <= 255 text 类型 L+2 字节, 在此...存ABC,占用的空间仍然为10. varchar是长度可变的,存ABC,占用的空间为3.获取数据时,varchar不需要将后面的空格去掉。...(3)char的存储方式是,对英文字符(ASCII)占用1个字节,对一个汉字占用两个字节;而varchar的存储方式是,对每个英文字符占用2个字节,汉字也占用2个字节,两者的存储数据都非unicode的字符数据

1.7K20

mysql 数据类型及占用字节

3 个字节  INT                               4 个字节  INTEGER                           4 个字节  BIGINT                            ...4 个字节  DOUBLE                            8 个字节  DOUBLE PRECISION                  8 个字节  REAL                              ...8 个字节  DECIMAL(M,D)                      M字节(D+2 , 如果M < D)  NUMERIC(M,D)                      M字节(D+...8 个字节  TIMESTAMP                               4 个字节  TIME                                    3 个字节 ...                    L+1 字节, 在此L< 2 ^ 8  BLOB, TEXT                               L+2 字节, 在此L< 2 ^

2.2K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    MySQLtext字段

    对于text列,插入时MySQL不会对它进行填充,并且select时不会删除任何末尾的字节。...当我们对text列进行排序的时候,决定顺序的字符个数是由参数max_sort_length来决定的,例如下面这个例子: mysql> SET max_sort_length = 2000; mysql>...,也就是 65535(64k)字节,而varchar本身是按字符串个数来定义的,在mysql中使用uft-8字符集一个字符占用三个字节,所以单表varchar实际占用最大长度如下: 1.使用utf...-8字符编码集varchar最大长度是(65535-2)/3=21844个字符(超过255个字节会有2字节额外占用空间开销,所以减2,如果是255以下,则减1)。...2.使用 utf-8mb4字符集,mysql中使用 utf-8mb4 字符集一个字符占用4个字节,所以 varchar 最大长度是(65535-2)/4=16383 个字符(超过255个字节会有2字节额外占用空间开销

    11.8K10

    varchar有最大长度限制吗

    ,这是因为 varchar 需要额外增加 1 到 2 个字节来存储字符的长度,这个值被称作前缀。...也就是说在 varchar 类型中,除了字符本身实际占用的空间外,还需要 1 个或 2 个字节来声明这个字符的长度。...另外还有一个小问题,一个字段如果允许为 null ,在 mysql 中也是需要增加额外空间来单独标识的,反之则不需要这个额外空间,至于这个空间大小具体是怎么计算的,我目前也还没有研究过。...instead ‍ ##减去varchar前缀长度标识2个字节,还是报错,说明null标识也占用了空间 mysql> create table test ( address varchar(65533...varchar 最大长度限制 = (行最大字节数(65535) - null 标识字节数 - 长度前缀字节数(1或2)) / 字符集单字符占用最多字节数 看到这里,不知道你有没有一个疑问,为什么长度前缀

    14.2K21

    |mysql系列(3)

    前言 上篇《VARCHAR(M) 到底占用多少个字节?|mysql系列(2)》分享了VARCHAR(M) 占用多少个字节,那VARCHAR 最大能存多少个字符呢?...|mysql 系列(1)》一文中讲到,MySQL服务器上负责对表中数据的读取和落盘(即写入磁盘)工作是由存储引擎 完成的。InnoDB是一个将表中的数据存储到磁盘上的存储引擎 。...我们寻求答案的地方在记录的额外信息里面。 ? 记录的额外信息 记录的额外信息包括:变长字段长度列表、NULL值列表和记录头信息。...变长字段长度列表: 比如VARCHAR(M)、VARBINARY(M)、各种TEXT类型,各种BLOB类型,把拥有这些数据类型的列称为变长字段 ; 变长字段占用的存储空间分为两部分: 真正的数据内容...那么对于占用字节数该怎么表示呢? 如果列中的字符串都比较短,也就是说内容占用字节数比较小,用1个字节就可以表示,但是如果变长列的内容占用字节数比较多,可能就需要用2个字节来表示。

    1.9K20

    CHAR与VARCHAR面面观

    其实M指的是字符数,即这个字段最多存储多少个字符,M可不指定,默认为1,范围是[0,255],单个字母、数字、中文等都是占用一个字符。utf8字符集下一个中文字符占用3个字节。...varchar可存储的长度范围为0-65535字节,此外,varchar需要使用1或者2个额外字节记录字符串的长度:如果列的最大长度小于或等于255字节,则只使用1个字节表示,否则使用2个字节。...对于Innodb引擎,utf8字符集来说,单个中文字符占用3个字节,所以varchar(M)中的M最大不会超过21845,即M的范围是[0,21845),并且M必须指定。...另外MySQL规定:单个字段长度不大于65535字节;单行最大限制为65535,这里不包括TEXT、BLOB字段。...例如用CHAR(1)来存储只有Y和N的值,如果采用单字节字符集只需要一个字节,但是VARCHAR(1)却需要两个字节,因为还有一个记录长度的额外字节

    52120

    MySQL行格式原理深度解析

    优点: 存储效率较高,因为数据是紧密排列的,没有额外的空间浪费。 缺点: 对于某些类型的数据(如BLOB和TEXT),只存储部分数据,其余数据存储在外部页中,需要通过额外的指针来访问。...对于NULL值,它只占用NULL标志位,不占用额外的存储空间。 此外,如果表没有定义主键,InnoDB还会为每行添加一个6字节的rowid列。...在InnoDB的Dynamic行格式下,处理变长数据类型(如VARCHAR、TEXT和BLOB)的需要存储额外的信息来追踪实际数据的长度,因为这些字段中存储的数据字节数是不固定的: 1....这些额外的信息会占用行的一部分空间,从而减少可用于实际数据的空间。 记录头信息:每行记录都需要一些额外字节来存储记录头信息,这些信息包括指向行中各个字段的指针以及记录的其他元数据。...变长字段长度列表:对于变长字段(如 VARCHAR、TEXT、BLOB),InnoDB 需要在行中存储额外字节来表示每个字段的实际长度。

    52610

    MySQL设计表规范

    ,所以要占用更多的空间】 使用 TIMESTAMP(4 个字节) 或 DATETIME 类型 (8 个字节) 存储时间【切忌使用字符串】 同财务相关的金额类数据必须使用 decimal 类型...避免使用 TEXT,BLOB 数据类型,最常见的 TEXT 类型可以存储 64k 的数据 建议把 BLOB 或是 TEXT 列分离到单独的扩展表中 MySQL 内存临时表不支持 TEXT、BLOB 这样的大数据类型...尽可能把所有列定义为 NOT NULL 原因: 索引 NULL 列需要额外的空间来保存,所以要占用更多的空间 进行比较和计算时要对 NULL 值做特别的处理 5....14:07 TIMESTAMP 占用 4 字节和 INT 相同,但比 INT 可读性高 超出 TIMESTAMP 取值范围的使用 DATETIME 类型存储 经常会有人用字符串存储日期型的数据(不正确的做法...4 个字节可以存储 9 位数字,并且小数点要占用一个字节 可用于存储比 bigint 更大的整型数据 关于存储引擎 MySQL使用插件式存储引擎,可根据应用场景选择最合适的存储引擎。

    1.5K10

    结合案例说明MySQL的数据类型如何优化

    varchar(n) n小于等于255使用额外一个字节保存长度,n>255使用额外两个字节保存长度。...varchar应用场景: 存储长度波动较大的数据,如:文章,有的会很短有的会很长 字符串很少更新的场景,每次更新后都会重算并使用额外存储空间保存长度 适合保存多字节字符,如:汉字,特殊字符等 char:...类型 MySQL 把每个 BLOB 和 TEXT值当作一个独立的对象处理。...日期时间 datetime 占用8个字节 与时区无关,数据库底层时区配置,对datetime无效 可保存到毫秒 可保存时间范围大 不要使用字符串存储日期类型,占用空间大,损失日期类型函数的便捷性 timestamp...占用4个字节 时间范围:1970-01-01到2038-01-19 精确到秒 采用整形存储 依赖数据库设置的时区 自动更新timestamp列的值 date 占用字节数比使用字符串、datetime

    1.1K10

    深入浅出——InnoDB记录结构详解,菜鸡看了直呼:能懂!

    ^) 这怎么这么像协议,hhh 咱们就不从大类上来说了,直接从小抓起 记录的额外信息 在将之前,:mouse::mouse:在这里做个预处理,咱们假设有一张表,长这个屌样 mysql> CREATE TABLE...== 行溢出数据 这里我放到前面来说,趁热打铁 VARCHAR(M)最多能存储的数据 MySQL对一条记录占用的最大存储空间是有限制的,除了BLOB或者TEXT类型的列之外,其他所有的列(不包括隐藏列和记录头信息...(简单来说就是普通的mysql一行记录占用的存储空间不能超过65535个字节) 当然,这65535里面还存储了其他数据(storage overhead) 拿varchar来说,主要有3部分: 真实数据...每个页除了存放我们的记录以外,也需要存储一些额外的信息,大概132个字节。...每个记录需要的额外信息是27字节 这27个字节包括下边这些部分: 2个字节用于存储真实数据的长度 (一行记录最大可以占用65535个字节) 1个字节用于存储列是否是NULL值 5个字节大小的头信息

    79451

    mysql学习总结02 — 数据类型

    ,不再使用char和varchar char的长度L不区分中英文 varchar需要记录数据长度(系统根据数据长度自动分配空间),所以每个varchar数据产生后,系统都会在数据后面增加1-2个字节额外开销用来保存数据所占用的空间长度...如果数据本身小于127个字符:额外开销一个字节,如果大于127个,开销两个字节 char的数据查询效率比varchar高 char 和 varchar 数据存储对比 (utf8字符占用3字节) 存储数据...blob 存储二进制文本(图片/文件),一般不使用blob存储文件本身,通常存链接 text分四种,一般使用text tinytext 0-255 2^8+1 1个字节 小型文本 text...大型文本 注意点: 在选择对应的存储文本时,不用刻意选择text类型,系统会自动根据存储的数据长度选择合适的文本类型 在选择字符存储时,如果数据超过255字符,一定选择text存储 mysql记录长度...mysql中规定记录长度 (record == row) 总长度不能超过65535字节,varchar能够存储的理论值为65535字符,字符在不同的字符集下占用多个字节,且需要额外字节来保存长度 utf8

    1.4K20

    InnoDB(4)行溢出--mysql从入门到精通(九)

    65535个字节,如果使用ascii字符集,一个字符代表一个字节,如果创建的话则会如下: mysql> create table max_size( -> c varchar(65535)...个字节,除了我们需要存储的真是数据外,还有额外数据:变长字段长度列表,null值列表(若有not null)则可以省略。...ERROR 1074 (42000): Column length too big for column 'c' (max = 32767); use BLOB or TEXT instead mysql...instead 根据sql提示可以看到,创建gbk字符集的表,则最大可以用32767个字节(65532/2),因为gbk一个字符占用的最大字节是2,而utf8一个字符占用的最大字节是3,所以报错21845...一个表中所有列(不包括隐藏列和记录头信息),占用的最大字节长度为65535个字节

    55930

    mysql数据类型详解(1)

    可空列需要更多的存储空间,还需要在mysql内部进行特殊处理。当可空列被索引的时候,每条记录都需要一个额外字节,还能导致myisam中固定大小的索引变成可变大小的索引。...它能比固定长度类型占用更少的存储空间,因为它占用了自己需要的空间。可以节约空间,对性能有帮助,然而由于长度是可变的,它们在更新的时候可能会发生变化,这会引起额外的工作。...char(1)字符串对于单字节字符集只会用1个字节,但是varchar(1)则会占用2个字节,因为1个字节用来存储长度信息。...blob和text类型分别以二进制和字符串的形式保存大量数据。 mysql把blob和text当成实体的对象来处理。存储引擎会特别的保存它们。...mysql非常紧凑的方式保存了它们,根据列表中值的数量,mysql会把它们压缩到1到2个字节中。

    96680

    MySQL之char、varchar类型简析

    65532 个字符 gbk模式下是0~32767,一个字符占两个字节,最多能存 32766 个字符 若定义的时候超过上述限制,则varchar字段会被强行转为text类型,并产生warning。...如果被varchar超过上述的b规则,被强转成text类型,则每个字段占用定义长度为11字节,当然这已经不是“varchar”了。...char的存储方式是,对英文字符(ASCII)占用1个字节,对一个汉字占用两个字节;而varchar的存储方式是,对每个英文字符占用2个字节,汉字也占用2个字节,两者的存储数据都非unicode的字符数据...例如用char(1)来存储只有Y和N的值,只需要一个字节,但是varchar却需要两个字节,因为还一个记录长度的额外字节。...VARCHAR需要使用1或2个额外字节记录字符串的长度:如果列的最大长度小于或等于255字节,则只使用1个字节表示,否则使用2个字节

    2.8K30

    数据库MySQL-varchar与char类型

    4. varchar 和char类型 4.1 varchar类型的存储特点 用于存储变长字符串, 只是占用必要的存储空间....记得存储的是字符为单位. 30个字符并不代表是30个字节, 需要根据具体选择的编码格式来进行确定的 列的长度小于255则只是占用一个额外字节用于记录字符串的长度 列的长度大于255则要占用两个额外字节用于纪录字符串长度...varchar最长为65535, 更长的话需要使用text类型 4.2 varchar的适用场景 字符串列的最大长度比平均长度大很多 字符串列很少被更新 使用了多字节字符集存储的字符串 备注: 在MySQL...但是对于varchar来说如果是在255字节内任意更改大小不会进行锁表....因为不需要新增额外字节来存储varchar的长度 4.3 char类型的存储特点 char类型是定长的 字符串存储在char类型的列中会删除末尾的空格 char类型的最大宽度为255 4.4 char

    1.1K10

    MySQL的varchar水真的太深了——InnoDB记录存储结构

    ,是服务器为了描述这条记录而不得不额外添加的一些信息,这些额外信息分为3类,分别是变长字段长度列表、NULL值列表和记录头信息。   ...——变长字段长度列表   一些变长的数据类型,比如VARCHAR(M)、各种TEXT类型,各种BLOB类型,变长数据类型的字段中存储多少字节的数据是不固定的,在存储真实数据的时候需要把这些数据占用字节数也存起来...如果超过就会报错   这里48545个字节,再多一个字符就会报错,远不到65535字节,差了1W多字节。主要是因为溢出列的原因,数据分散在不同的行中,所以,很长的数据,建议往text类型考虑。...在MySQL中,任何类型的列都可以被声明为NULL或NOT NULL,所以CHAR类型也可以有NULL值列表。 3.6 某个列数据占用字节数非常多怎么办?...从MySQL 5.7开始,InnoDB的DYNAMIC行格式对变长字段(如TEXT和BLOB)的处理更加灵活,并没有固定将前768字节数据存储在行内的规则。

    1.7K40

    值得收藏:一份非常完整的 MySQL 规范(一)

    尽量做到冷热数据分离,减小表的宽度 MySQL 限制每个表最多存储 4096 列,并且每一行数据的大小不能超过 65535 字节 减少磁盘 IO,保证热数据的内存缓存命中率(表越宽,把表装载进内存缓冲池时所占用的内存也就越大...避免使用 TEXT、BLOB 数据类型,最常见的TEXT类型可以存储64k的数据 建议把 BLOB 或是TEXT列分离到单独的扩展表中 MySQL 内存临时表不支持 TEXT、BLOB 这样的大数据类型...TEXT 或 BLOB 类型只能使用前缀索引 因为 MySQL 对索引字段长度是有限制的,所以 TEXT 类型只能使用前缀索引,并且 TEXT 列上是不能有默认值的。 3....尽可能把所有列定义为 NOT NULL 原因: 索引 NULL 列需要额外的空间来保存,所以要占用更多的空间。 进行比较和计算时要对 NULL 值做特别的处理。 5....占用空间由定义的宽度决定,每 4 个字节可以存储 9 位数字,并且小数点要占用一个字节。可用于存储比 bigint 更大的整型数据。 四、索引设计规范 1.

    58310

    值得收藏:一份非常完整的 MySQL 规范(一)

    尽量做到冷热数据分离,减小表的宽度 MySQL 限制每个表最多存储 4096 列,并且每一行数据的大小不能超过 65535 字节 减少磁盘 IO,保证热数据的内存缓存命中率(表越宽,把表装载进内存缓冲池时所占用的内存也就越大...避免使用 TEXT、BLOB 数据类型,最常见的TEXT类型可以存储64k的数据 建议把 BLOB 或是TEXT列分离到单独的扩展表中 MySQL 内存临时表不支持 TEXT、BLOB 这样的大数据类型...尽可能把所有列定义为 NOT NULL 原因: 索引 NULL 列需要额外的空间来保存,所以要占用更多的空间。 进行比较和计算时要对 NULL 值做特别的处理。 5....TIMESTAMP 占用 4 字节和 INT 相同,但比 INT 可读性高,超出 TIMESTAMP 取值范围的使用 DATETIME 类型存储。...占用空间由定义的宽度决定,每 4 个字节可以存储 9 位数字,并且小数点要占用一个字节。可用于存储比 bigint 更大的整型数据。 四、索引设计规范 1.

    71110
    领券