Mysql基础篇(3)—— MySQL数据库类型
整数类型
类型名 | 占用字节 | 有符号范围 | 无符号范围(UNSIGNED) |
---|---|---|---|
TINYINT | 1 | -128~127 | 0~255 |
SMALLINT | 2 | -32768~32767 | 0~65535 |
MEDIUMINT | 3 | -8388608~8388607 | 0~16777215 |
INT、INTEGER | 4 | -2147483648~2147483647 | 0~4294967295 |
BIGINT | 8 | -9223372036854775808~9223372036854775807 | 0~18446744073709551615 |
浮点类型
类型名 | 占用字节 | 有符号范围 | 无符号范围(UNSIGNED) |
---|---|---|---|
FLOAT | 4 | (-3.4E+38,-1.17E-38),0,(1.17E-38,3.4E+38) | 0,(1.17E-38,3.4E+38) |
DOUBLE | 8 | (-1.7E+308,-2.2E-308),0,(2.2E-308,1.7E+308) | 0,(2.2E-308,1.7E+308) |
ps:
mysql存储浮点数的格式为:符号(S)、尾数(M)和阶码(E)。有无符号,正数的范围是一样的
尾数是二进制存储的,除了以5结尾的小数,其他的都会有精度上的缺失。所以浮点数不要用“=”来判断两个数是否相等
不建议定义精度M和标度D
整数部分超出范围会直接报错,小数部分超出范围会四舍五入
定点数类型
DECIMAL
使用DECIMAL(M,D)
方式方式表示高精度小数。0<=M<=65,0<=D<=30,D<M。DECIMAL的存储空间为M+2。
底层是以字符串的形式存储的,这就决定了它是精确的。
不指定MD,默认是DECIMAL(10, 0)。
定点数和浮点数
定点数精确但是通常情况占用空间相对较大(M大于2/6的时候就大于float/double的占用大小了)。
相反,浮点数通常情况下相对于定点数来说占用空间小,范围大但是不精确。
位类型
类型名 | 长度 | 长度范围 | 占用字节 |
---|---|---|---|
BIT(M) | M,默认1 | 1<=M<=64 | 约为(M + 7) / 8 个字节 |
### 日期与时间类型
类型名 | 介绍 | 占用字节 | 格式 | 最小值 | 最大值 |
---|---|---|---|---|---|
YEAR | 年 | 1 | YYYY或YY | 1901 | 2155 |
TIME | 时间 | 3 | HH:MM:SS | -838:59:59 | 838:59:59 |
DATE | 日期 | 3 | YYYY-MM-DD | 1000-01-01 | 9999-12-03 |
DATETIME | 日期时间 | 8 | YYYY-MM-DD HH:MM:SS | 1000-01-01 00:00:00 | 9999-12-31 23:59:59 |
TIMESTAMP | 日期时间 | 4 | YYYY-MM-DD HH:MM:SS | 1970-01-01 00:00:00 UTC | 2038-01-19 03:14:07UTC |
ps:
- TIMESTAMP存储数据的时候会转换成距离1970-01-01 00:00:01 UTC的毫秒值,查询的时候会根据查询时候所在的时区将毫秒值转换成时间,因此不同时区查看看一个数据会得到不同的结果。
- TIMESTAMP类型的日期比较相对于DATATIME来说较快。
文本字符串类型
类型 | 字符长度 | 长度范围(存储字节范围) | 占用存储空间 |
---|---|---|---|
CHAR(M) | M | 0<=M<=255 | M字符所占用的字节 |
VARCHAR(M) | M | 0<=M<=65535 | M字符所占用的字节+1个字节 |
TINYTEXT | L | 0<=L<=255 | L字符所占用的字节+2个字节 |
TEXT | L | 0<=L<=65535 | L字符所占用的字节+2个字节 |
MEDIUMTEXT | L | 0<=L<=16777215 | L字符所占用的字节+3个字节 |
LONGTEXT | L | 0<=L<=4294967295 | L字符所占用的字节+4个字节 |
ENUM | L | 1<=L<=65535 | 1或2个字节 |
SET | L | 0<=L<=64 | 1,2,3,4或8个字节 |
CHAR和VARCHAR
类型 | 特点 | 空间上 | 时间上 | 试用场景 |
---|---|---|---|---|
CHAR(M) | 固定长度 | 浪费存储空间 | 效率高 | 存储不大,速度要求高 |
VARCHAR(M) | 可变长度 | 节省存储空间 | 效率低 | 非CHAR的情况 |
具体存储引擎的情况:
- MyISAM:最好用CHAR,这样使得整个表静态化,以空间换时间
- MEMORY:底层都是用固定长度去存储数据,用啥都一样
- InnoDB:建议使用varchar类型,因为InnoDB内部行存储的格式并没有区分固定长度和可变长度(所有数据行都是用指向数据列值得头指针),而且主要影响性能因素是数据行使用的存储总量,所以一般情况除了简短并且固定长度的使用char,其他都使用varchar。
二级制字符串
类型 | 特点 | 值的长度 | 占用空间 |
---|---|---|---|
BINARY(M) | 固定长度 | M (0 <= M <= 255) | M个字节 |
VARBINARY(M) | 可变长度 | M (0 <= M <= 65535) | M+1个字节 |
和char、varchar很像
二进制大对象
类型 | 长度 | 长度范围 | 占用空间 |
---|---|---|---|
TINYBLOB | L | 0 <= L <= 255 | L + 1 个字节 |
BLOB | L | 0 <= L <= 65535(相当于64KB) | L + 2 个字节 |
MEDIUMBLOB | L | 0 <= L <= 16777215 (相当于16MB) | L + 3 个字节 |
LONGBLOB | L | 0 <= L <= 4294967295(相当于4GB) | L + 4 个字节 |
TEXT和BLOB的使用注意事项
BLOB和TEXT值也会引起自己的一些问题,特别是执行了大量的删除或更新操作的时候。删除这种值会在数据表中留下很大的
" 空洞 "
,以后填入这些"空洞"的记录可能长度不同。为了提高性能,建议定期使用OPTIMIZE TABLE
功能对这类表进行碎片整理
把BLOB或TEXT列 分离到单独的表 中。在某些环境中,如果把这些数据列移动到第二张数据表中,可以让你把原数据表中的数据列转换为固定长度的数据行格式,那么它就是有意义的。这会 减少主表中的碎片 ,使你得到固定长度数据行的性能优势。它还使你在主数据表上运行 SELECT * 查询的时候不会通过网络传输大量的BLOB或TEXT值。
JSON类型
MYSQL5.7已经支持,MYSQL8.0加了自动验证的json文档和优化的存储结构。
空间类型
MySQL 空间类型扩展支持地理特征的生成、存储和分析。这里的地理特征表示世界上具有位置的任何东西,可以是一个实体,例如一座山;可以是空间,例如一座办公楼;也可以是一个可定义的位置,例如一个十字路口等等。MySQL中使用 Geometry(几何) 来表示所有地理特征。Geometry指一个点或点的集合,代表世界上任何具有位置的事物。
MySQL的空间数据类型(Spatial Data Type)对应于OpenGIS类,包括单值类型:GEOMETRY、POINT、LINESTRING、POLYGON以及集合类型:MULTIPOINT、MULTILINESTRING、MULTIPOLYGON、GEOMETRYCOLLECTION 。
Mysql基础篇(3)—— MySQL数据库类型相关推荐
- MySql基础篇---004 其它数据库对象篇:视图,存储过程与函数,变量、流程控制与游标 ,触发器
第14章_视图 讲师:尚硅谷-宋红康(江湖人称:康师傅) 官网:http://www.atguigu.com 1. 常见的数据库对象 对象 描述 表(TABLE) 表是存储数据的逻辑单元,以行和列的形 ...
- MySQL——基础篇
MySQL--基础篇 一.数据库的相关概念 数据库(database) 保存有组织的数据的容器(通常是一个文件或一组文件). 表(table) 某种特定类型数据的结构化清单. 模式(schema) 关 ...
- 深入浅出Mysql - 基础篇(列类型/运算符/函数)
深入浅出Mysql - 基础篇(列类型/运算符/函数) 每一个常量.变量和参数都有数据类型,它用来指定一定的存储格式.约束和有效范围.MySQL提供了多种数据类型,主要包括数值型.字符串类型.日期和时 ...
- Mysql基础篇(1)—— 基础概念、DML基本语法和表连接
前言 Mysql基础篇相关的内容是看了康师傅的视频做的笔记吧 数据库相关概念 DB: 数据库(Database) 存储数据的仓库,本质是一个文件系统.它保存了一系列有组织的数据. DBMS:数据库 ...
- 最全MySQL基础篇
文章目录 导入表的问题 第三章_最基本的SELECT语句 1. SQL语言的规则和规范 1) 基本规则 2) SQL大小写规范(建议遵守) 3) 注释 4) 命名规则 2. 基本的SELECT语句 1 ...
- MySQL基础篇——第11章 DML(数据操作):增删改
MySQL基础篇--第11章 DML(数据操作):增删改 1. 插入数据(增) INSERT INTO ... 使用 INSERT INTO 语句向表中插入数据(记录) 1.1 方式1:VALUES ...
- MySQL基础篇:子查询
文章目录 概述 where型子查询 from型子查询 EXISTS型子查询 复制表子查询 概述 在某些情况下,当进行一个查询时,需要的条件或数据要用另一个select语句的结果,这个时候,就要用到** ...
- mysql 基础篇(二) 账号、权限管理
mysql 基础篇(二) 账号.权限管理.备份与还原 建立账号密码: Grant all on test.* to "cj"@"localhost" ident ...
- 【MySQL基础篇】数据导出导入权限与local_infile参数
[MySQL基础篇]数据导出导入权限与local_infile参数 问题背景 数据导出测试 创建测试库(在主库进行) 测试数据导出(在从库进行) 测试数据导入(在主库进行) 问题背景 MySQL高可用 ...
- MySql基础篇---001 数据库概述与MySQL安装篇:概述,表和类对应关系,表关系、数据库卸载,下载,安装,配置,启动,登录,演示,图形化工具,目录结构,常见问题
第01章_数据库概述 讲师:尚硅谷-宋红康(江湖人称:康师傅) 官网:http://www.atguigu.com 1. 为什么要使用数据库 持久化(persistence):把数据保存到可掉电式存储 ...
最新文章
- Linux Kernel TCP/IP Stack — 协议栈发包处理流程
- 同一网段还是跨VLAN的取舍
- Windows XP安装Python,最高支持到3.4.4,后续版本不支持
- 数据结构-----AVL树的插入删除操作
- PHP的pm、pm.max_requests、memory_limit
- java web中出现莫名错误,出现错误标识和红线但不影响运行。
- java项目整合mybatis_JavaWeb项目整合Spring,SpringMVC,Mybatis框架
- 几种常见的模式识别算法整理和总结
- 试卷分析计算机基础,计算机基础试卷分析.doc
- Thor 1.3.4免费安装
- 微信朋友圈设计方案简述
- 【工科数学分析】2021-10-07-工科数学分析叒复习(三)
- Aspose.Words导出word导出pdf
- JS函数传参是传值还是传引用
- 受贿千万,字节前餐饮主管二审被判6年
- 中序线索化二叉树的遍历
- php stripslashes和addslashes的区别
- 服务器虚拟化实施方案可研报告,服务器虚拟化实施方案可研可行报告报告(2017word资料).doc...
- MNF最小噪声分离变换
- wavplay控件应用之SigmaStudio
热门文章
- AI面临产业大考:落地虽难,但产业化路径已日渐清晰
- node 脚手架项目,快速删除 node_modules 包的 rimraf 命令
- matlab产生一个稀疏向量,Matlab中的稀疏矩阵向量乘法比Python快吗?
- 文学类的小说,言情类的,没有排行榜上的
- python3 chm文档下载_python3.7.0官方参考文档 最新api文档 chm_Python教程_源雷技术空间...
- CDN流量是什么,怎么计算?
- Xubuntu之lightdm开机无密码进入界面
- 2020年软件测试工程师需要具备什么技能--需要学哪些
- Go项目配置管理神器之viper使用详解
- VPLS和MPLS 的区别