`
xombat
  • 浏览: 162560 次
  • 性别: Icon_minigender_1
  • 来自: 乌托邦
社区版块
存档分类
最新评论

Mysql 中各类型数据的的存储需求

阅读更多
首先,数据库中每行最大长度不能超过65535bytes,其中Blob和Text的数据只占用9到12byte(具体大小不知道和什么有关系)。

Char(M)的长度计算比较简单,但也要详细说一下,M是字符的个数(不能超过255),而不是byte数,因此它的实际存储容量和它所使用的字符集有关系,对于像utf8这样的字符集(每个字符没有固定的长度),他的容量V应该如何计算?这里简单的V = M * w,其中w是字符集中每个字符占用的最大byte数,对于utf8应该是3吧,我原来猜测既然像char(4)这样的数据最大能容纳4*3bytes(对于utf8字符集),那么他肯定能容纳’123456’这段数据,因为他用utf8字符集表示也不过占用6bytes。但是实际测试后发现不是,不管是数字还是字母或者汉字,他最多只能容纳4个。

然后我们重点关注一下varchar(M)的长度,因为它的长度很不固定而且使用范围最广。这里的M的范围理论上限制在0到65535之间,为什么说理论上,是因为它的实际长度要受很多因素的限制,比如每行最大长度,使用的字符集,以及M。我们拿 varchar(127)来作为例子,假设他使用gbk字符集,他的最大可能长度应该是127*2=254,但是因为他需要有一个prefix来表示他具体bytes数是多少(因为varchar是变长的,没有这个长度值他不知道如何读取数据),因此分配1byte来表示他的bytes数为254,这样他最终占用的byte数为255,如果是varchar(128),2*128 = 256这个数字用一个byte无法表示,因此需要2个byte的prefix,这样他会占用258bytes。而如果他改使用latin1字符集,那么每个字符为1个字节,这样它的最大可能长度为1* 128 < 256,可以用一个byte表示它的长度,因此他又占用129bytes。

这里的M最大能是多少呢?对于latin1的字符,因为每个字符占一个字节,而max row size 为65535,所以M最大为65535-2 = 65533(2是prefix的长度,这个65535其实还和这一行中其他列的长度有关,准确的说应该是65535减去其他列的长度,但这里简单将他们忽略)。而如果使用utf8字符,字符最大占用3个字节,那么M最大应该是(65535 – 2)/3 = 21844,这里的2是prefix的长度。

对于某些数据库引擎,他的数据存取空间大小还需要考虑align的情况,比如计算的大小是15,但他的align = 4,所以它最后会占用16bytes。
分享到:
评论

相关推荐

    MySQL数据库:MySQL存储引擎.pptx

    在Oracle和SQL Server等数据库中只有一种存储引擎,所有数据存储管理机制都是一样的。而MySQL数据库提供了多种存储引擎,用户可以根据不同的需求为数据表选择不同的存储引擎,用户也可以根据自己的需要编写自己的...

    数据结构Redis中数据类型对应的数据结构.pdf

    尽管它经常被⽤作内存数据库,但是,它也⽀持将数据存储在硬盘中。 Redis 中,键的数据类型是字符串,值的数据类型有很多,常⽤的数据类型有字符串、列表、字典、集合、有序集合。 1. 字符串( 字符串(string) ) ...

    MySQL 5.1中文手冊

    11.5. 列类型存储需求 11.6. 选择正确的列类型 11.7. 使用来自其他数据库引擎的列类型 12. 函数和操作符 12.1. 操作符 12.1.1. 操作符优先级 12.1.2. 圆括号 12.1.3. 比较函数和操作符 12.1.4. 逻辑操作符 12.2. ...

    MySql转换成Oracle工具

    可以转换所有的Mysql字段类型 支持所有版本的Mysql 可以将数据合并到已经存在的ORACLE表中 非常容易使用的向导模式 支持所有版本的Mysql字符集 对超大数据表的导出进行了优化处理 Convert Mysql to Oracle...

    MySQL数据库:需求分析.pptx

    需求分析的任务就是收集数据,要尽可能多地收集关于数据库要存储的数据以及将来如何使用这些数据的信息,确保收集到数据库需要存储的全部信息。 ;(1)有多少数据,数据的来源在哪里,是否有已存在的数据资源? (2...

    MySql 5.1 参考手册.chm

    前言 1. 一般信息 1.1. 关于本手册 1.2. 本手册采用的惯例 1.3. MySQL AB概述 1.4. MySQL数据库管理系统概述 1.4.1. MySQL的历史 1.4.2. MySQL的的主要特性 ...11.5. 列类型存储需求 11.6. 选择正确的列类型

    MySQL作为一款成熟稳定的数据库管理系统,在数据存储和管理方面具有重要的地位和价值,为各种应用程序提供了可靠的数据支持

    广泛应用:MySQL被广泛用于各种Web应用程序和企业级应用中,如网站数据存储、电子商务系统、日志记录等。许多知名的网站和公司都在使用MySQL作为其后端数据库管理系统。 稳定性和可靠性:MySQL经过长期的发展和改进...

    数据仓库hive用到的mysql安装包

    mysql安装包,mysql外界数据库作为存储hive元数据的存储介质,它的存在,方便hive用户根据自身的需求对数据进行分析处理。

    mysql5.1中文手册

    列类型存储需求 11.6. 选择正确的列类型 11.7. 使用来自其他数据库引擎的列类型 12. 函数和操作符 12.1. 操作符 12.1.1. 操作符优先级 12.1.2. 圆括号 12.1.3. 比较函数和操作符 12.1.4. ...

    将关系型数据库MySQL存储数据转换为XML文件的实现

    通过模块化程序实现将MySQL数据库中存储数据转换为XML既可以实现将MySQL数据在网路上传输的需求,并提高数据传输的安全性,而且实现方法具有一定的扩展性,便于迁移到其他数据库。同时,实现过程中使用接口进行处理...

    MYSQL v4.1中文参考手册(CHM)

    6.2.6.2 日期和时间类型存储需求 6.2.6.3 字符串类型存储需求 6.3 用于 SELECT 和 WHERE 子句的函数 6.3.1 无类型的特殊运算符和函数 6.3.1.1 圆括号 6.3.1.2 比较运算符 6.3.1.3 逻辑运算符 6.3.1.4 ...

    MySQL 5.1官方简体中文参考手册

    11.5. 列类型存储需求 11.6. 选择正确的列类型 11.7. 使用来自其他数据库引擎的列类型 12. 函数和操作符 12.1. 操作符 12.1.1. 操作符优先级 12.1.2. 圆括号 12.1.3. 比较函数和操作符 12.1.4. 逻辑操作符 12.2. ...

    python基于Flask+mysql+vue城市房价数据分析系统,,前后端分离

    城市房价数据分析系统采用前后端分离的架构,前端使用 Vue,后端使用 Python/Flask,MySQL 提供数据存储。 主要包括数据爬取、数据存储、数据可视化、后台管理、房价预测五大部分组成。其中,数据可视化包含三个...

    MYSQL中文手册

    11.5. 列类型存储需求 11.6. 选择正确的列类型 11.7. 使用来自其他数据库引擎的列类型 12. 函数和操作符 12.1. 操作符 12.1.1. 操作符优先级 12.1.2. 圆括号 12.1.3. 比较函数和操作符 12.1.4. 逻辑操作符 ...

    Mysql支持的数据类型(列类型总结)

    MySQL支持大量的列类型,它可以被分为3类:数字类型、日期和时间类型以及字符串(字符)类型。本节首先给出可用类型的一个概述,并且总结每个列类型的存储需求,然后提供每个类中的类型性质的更详细的描述

    MYSQL安装包官方试用版

    每个类型的存储需求取决于列值的实际长度(用前面的表中的L表示),而不是该类型的最大可能的大小。例如,VARCHAR(10)列可以容纳最大长度为10的字符串。实际存储需求是字符串(L)的长度,加上一个记录字符串长度的字节...

    图书管理系统数据库设计-MYSQL实现(3).docx

    return_table:存储学生的归还信息 6 这是一个简单的图书管理系统的MYSQL设计,包含了数据插入,删除,定时器,触发器设计 ticket:存储学生的罚单信息 manager: 3、设计索引 给出在各表上建立的索引以及使用的语句。...

    基于java某百货店POS积分管理系统的毕业设计,系统采用MySQL数据库进行数据存储,使用JDBC技术实现数据的访问

    MySQL数据库采用关系型数据存储,具有良好的扩展性和稳定性,能够满足系统对数据存储的各种需求。JDBC技术是一种标准的Java API,能够实现多种数据库的统一访问,提高了系统的通用性和灵活性。 界面采用Java Swing框架...

    MySQL 5.1参考手册

    11.5. 列类型存储需求 11.6. 选择正确的列类型 11.7. 使用来自其他数据库引擎的列类型 12. 函数和操作符 12.1. 操作符 12.1.1. 操作符优先级 12.1.2. 圆括号 12.1.3. 比较函数和操作符 12.1.4. 逻辑操作符 12.2. ...

    mysql官方中文参考手册

    11.5. 列类型存储需求 11.6. 选择正确的列类型 11.7. 使用来自其他数据库引擎的列类型 12. 函数和操作符 12.1. 操作符 12.1.1. 操作符优先级 12.1.2. 圆括号 12.1.3. 比较函数和操作符 12.1.4. 逻辑操作符 12.2. ...

Global site tag (gtag.js) - Google Analytics