MySQL-数据类型 整理总结
目录
1、整数类型
2、小数类型
3、日期和时间类型
4、字符串类型
5、二进制类型
1、整数类型
类型名称 | 解释说明 | 存储需求 | 取值范围(有符号) |
tinyint | 很小的整数 | 1 bit | -128〜127 |
smallint | 小的整数 | 2 bit | -32768〜32767 |
mediumint | 中等大小的整数 | 3 bit | -8388608〜8388607 |
int(integer) | 普通大小的整数 | 4 bit | -2147483648〜2147483647 |
bigint | 大整数 | 8 bit | -9223372036854775808〜9223372036854775807 |
2、小数类型
浮点类型有两种,分别是单精度浮点数(FLOAT)和双精度浮点数(DOUBLE);定点类型只有一种,就是 DECIMAL。
浮点类型和定点类型都可以用(M, D)
来表示,其中M
称为精度,表示总共的位数;D
称为标度,表示小数的位数。
浮点数类型的取值范围为 M(1~255)和 D(1~30,且不能大于 M-2),分别表示显示宽度和小数位数。M 和 D 在 FLOAT 和DOUBLE 中是可选的,FLOAT 和 DOUBLE 类型将被保存为硬件所支持的最大精度。DECIMAL 的默认 D 值为 0、M 值为 10。
类型名称 | 解释说明 | 存储需求 | 取值范围(有符号) |
float | 单精度浮点数 | 4 bit | -3.402823466E+38~-1.175494351E-38 |
double | 双精度浮点数 | 8 bit | -1.7976931348623157E+308~-2.2250738585072014E-308 |
decimal(m,d), dec | 压缩的“严格”定点数 | m+2 bit |
在 MySQL 中,定点数以字符串形式存储,在对精度要求比较高的时候(如货币、科学数据),使用 DECIMAL 的类型比较好,另外两个浮点数进行减法和比较运算时也容易出问题,所以在使用浮点数时需要注意,并尽量避免做浮点数比较。
货币数据,在sql sever中有 money(8bit) 、smallmoney(4bit)数据类型,可以理解为decimal类型,只不过在同等长度和精度情况下,所占空间比decimal小。
参考:(38条消息) sql server 的 money类型_挨踢笔记-CSDN博客_money类型
数据类型对应的取值范围的详细计算,参考:参考:(38条消息) float的精度和取值范围_AlbertS Home of Technology-CSDN博客_float的取值范围
3、日期和时间类型
类型名称 | 日期格式 | 日期范围 | 存储需求 |
YEAR | YYYY | 1901 ~ 2155 | 1 bit |
TIME | HH:MM:SS | -838:59:59 ~ 838:59:59 | 3 bit |
DATE | YYYY-MM-DD | 1000-01-01 ~ 9999-12-3 | 3 bit |
DATETIME | YYYY-MM-DD HH:MM:SS | 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 | 8 bit |
TIMESTAMP | YYYY-MM-DD HH:MM:SS | 1980-01-01 00:00:01 UTC ~ 2040-01-19 03:14:07 UTC | 4 bit |
注意:
1、每一个类型都有合法的取值范围,当指定确定不合法的值时,系统将“零”值插入数据库中。
2、为 TIME 列分配简写值时应注意:如果没有冒号,MySQL 解释值时,假定最右边的两位表示秒。(MySQL 解释 TIME 值为过去的时间而不是当前的时间)。例如,读者可能认为 '1112' 和 1112 表示 11:12:00(即 11 点过 12 分钟),但MySQL 将它们解释为 00:11:12(即 11 分 12 秒)。同样 '12' 和 12 被解释为00:00:12。相反,TIME 值中如果使用冒号则肯定被看作当天的时间,也就是说,'11:12' 表示 11:12:00,而不是 00:11:12。
3、MySQL 允许“不严格”语法:任何标点符号都可以用作日期部分之间的间隔符。例如,'98-11-31'、'98.11.31'、'98/11/31'和'98@11@31' 是等价的,这些值也可以正确地插入数据库。
4、TIMESTAMP 与 DATETIME 除了存储字节和支持的范围不同外,还有一个最大的区别是:
- DATETIME 在存储日期数据时,按实际输入的格式存储,即输入什么就存储什么,与时区无关;
- 而 TIMESTAMP 值的存储是以 UTC(世界标准时间)格式保存的,存储时对当前时区进行转换,检索时再转换回当前时区。即查询时,根据当前时区的不同,显示的时间值是不同的。
4、字符串类型
类型名称 | 说明 | 存储需求 |
CHAR(M) | 固定长度非二进制字符串 | M 字节,1<=M<=255 |
VARCHAR(M) | 变长非二进制字符串 | L+1字节,在此,L< = M和 1<=M<=255 |
TINYTEXT | 非常小的非二进制字符串 | L+1字节,在此,L<2^8 |
TEXT | 小的非二进制字符串 | L+2字节,在此,L<2^16 |
MEDIUMTEXT | 中等大小的非二进制字符串 | L+3字节,在此,L<2^24 |
LONGTEXT | 大的非二进制字符串 | L+4字节,在此,L<2^32 |
ENUM | 枚举类型,只能有一个枚举字符串值 | 1或2个字节,取决于枚举值的数目 (最大值为65535) |
SET | 一个设置,字符串对象可以有零个或 多个SET成员 | 1、2、3、4或8个字节,取决于集合 成员的数量(最多64个成员) |
注意:
1、CHAR 和 VARCHAR 类型区别
CHAR(M) 为固定长度字符串,在定义时指定字符串列长。当保存时,在右侧填充空格以达到指定的长度。M 表示列的长度,范围是 0~255 个字符。当检索到 CHAR 值时,尾部的空格将被删除。
VARCHAR(M) 是长度可变的字符串,M 表示最大列的长度,M 的范围是 0~65535。VARCHAR 的最大实际长度由最长的行的大小和使用的字符集确定,而实际占用的空间为字符串的实际长度加 1。VARCHAR 在值保存和检索时尾部的空格仍保留。
2、VARCHAR 和 TEXT 类型比较
VARCHAR 和 TEXT 类型是变长类型,其存储需求取决于列值的实际长度(在前面的表格中用 L 表示),而不是取决于类型的最大可能尺寸。
当保存或查询 TEXT 列的值时,不删除尾部空格。
5、二进制类型
类型名称 | 说明 | 存储需求 |
BIT(M) | 位字段类型 | 大约 (M+7)/8 字节 |
BINARY(M) | 固定长度二进制字符串 | M 字节 |
VARBINARY (M) | 可变长度二进制字符串 | M+1 字节 |
TINYBLOB (M) | 非常小的BLOB | L+1 字节,在此,L<2^8;最大长度为255 (28-1)字节 |
BLOB (M) | 小 BLOB | L+2 字节,在此,L<2^16;最大长度为65535 (216-1)字节 |
MEDIUMBLOB (M) | 中等大小的BLOB | L+3 字节,在此,L<2^24;最大长度为16777215 (224-1)字节 |
LONGBLOB (M) | 非常大的BLOB | L+4 字节,在此,L<2^32;最大长度为4294967295或4GB (231-1)字节 |
注意:
1、BINARY 和 VARBINARY 类型区别(类似于 CHAR 和 VARCHAR)
BINARY 类型的长度是固定的,指定长度后,不足最大长度的,将在它们右边填充 “\0” 补齐,以达到指定长度。例如,指定列数据类型为 BINARY(3),当插入 a 时,存储的内容实际为 “\a0\0”,当插入 ab 时,实际存储的内容为“ab\0”,无论存储的内容是否达到指定的长度,存储空间均为指定的值 M。
VARBINARY 类型的长度是可变的,指定好长度之后,长度可以在 0 到最大值之间。例如,指定列数据类型为 VARBINARY(20),如果插入的值长度只有 10,则实际存储空间为 10 加 1,实际占用的空间为字符串的实际长度加 1。
2、BLOB 和 TEXT类型的区别
BLOB 列存储的是二进制字符串(字节字符串),TEXT 列存储的是非进制字符串(字符字符串)。
BLOB 列是字符集,并且排序和比较基于列值字节的数值;TEXT 列有一个字符集,并且根据字符集对值进行排序和比较。
MySQL-数据类型 整理总结相关推荐
- mysql课程id数据类型_数据库学习之六:mysql数据类型
六.mysql数据类型 1.课程大纲 • 数据类型介绍 • 数据类型设置 • 列属性 • 数据类型的字符集用法 • 选择适当的数据类型 2.数据类型介绍 • 四种主要类别: 数值类型 字符类型 时间类 ...
- 面试题:mysql 数据类型
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 mysql 数据类型 MySQL数据类型 含义(有符号) tiny ...
- MySQL数据类型以及元数据的使用
第1章 Mysql数据类型 1.1 四中主要类别: 1. 数值类型 2. 字符类型 3. 时间类型 4. 二进制类型 1.2 数据类型三要素: 简介-完整-适当 ...
- jfinal mysql date,jfinal与mysql数据类型拾掇大全
前言:今天在做jfinal和mysql的数据转换时出现了java.lang.Boolean cannot be cast to java.lang.Integer错误,而之前我就遇到过这样的问题mys ...
- 9、MySQL数据类型约束 -mysql
目录 一.MySQL数据类型精讲 1. MySQL中的数据类型 2. 整数类型 2.2.2 UNSIGNED 2.2.3 ZEROFILL 2.3 适用场景 2.4 如何选择? 3. 浮点类型 4. ...
- Day462.MySQL数据类型约束 -mysql
MySQL数据类型精讲 1. MySQL中的数据类型 类型 类型举例 整数类型 TINYINT.SMALLINT.MEDIUMINT.INT(或INTEGER).BIGINT 浮点类型 FLOAT.D ...
- MySQL数据库,从入门到精通:第十二篇——MySQL数据类型详解
MySQL数据库,从入门到精通:第十二篇--MySQL数据类型详解 第 12 章_MySQL数据类型精讲 1. MySQL中的数据类型 2. 整数类型 2. 1 类型介绍 2. 2 可选属性 2. 2 ...
- [转]mysql 数据类型
原文地址:https://github.com/jaywcjlove/handbook/blob/master/MySQL/MySQL%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E ...
- MySQL 语句整理 2019-5-3
MySQL 语句整理 在整理完Oracle的一些常见用语句后,由于MySQL的语法跟Oracle略有不同,随跟PN的MySQL视频进行了间接整理. 查询薪水大于1800, 并且部门编号为20或30的员 ...
- MySQL数据类型之数字类型详细解析
MySQL数据类型之数字类型 数字类型按照我的分类方法分为三类:整数类.小数类和数字类. 我所谓的"数字类",就是指DECIMAL和NUMERIC,它们是同一种类型.它严格的说不是 ...
最新文章
- HDU 1253 胜利大逃亡
- 软件测试——系统测试总结报告模板
- 一步步编写操作系统 46 用c语言编写内核3
- 【Python CheckiO 题解】Absolute Sorting
- 澳国立计算机录取分数,澳洲出国:2018年澳洲国立大学对高考成绩的本科录取分数线(多图)...
- input内强制保留小数点后两位 位数不足时自动补0
- Hadoop单机和伪分布式环境搭建
- Kubernetes 1.4安装后查看记录
- OpenDaylight你不可不知的十大问题——OpenDaylight是什么?
- 4款超好用的时间轴制作软件
- 如何在线修改图片大小?图片在线改大小方法推荐给你
- ipad如何与手机微信连接服务器地址,如何设置微信在手机和ipad同步 - 卡饭网
- Opencv 学习笔记(二)
- 季冠携“闪星服务”受邀参加2021连锁企业轻资产论坛
- echarts4.8.0最新版本下载,亲测可用
- 补码一位乘--布斯公式
- PJzhang:关闭wps小广告和快速关闭445端口
- UVM基础-TLM通信机制(二)
- 达梦redo log损坏的处理办法
- 内外网隔离-Traffic Policy
热门文章
- input输入框提示从数据库查出来的一堆数据
- 爬虫之requests库的使用
- @Transactional之Spring事务深入理解
- HDU 1546 Idiomatic Phrases Game
- 【Codeforces Round #519 by Botan Investments D】Mysterious Crime
- WebStorm连接Github教程
- 51Nod 1067:Bash游戏 V2(巴什博弈)
- 常用C/C++预处理指令详解
- Android ViewPager 里有子ViewPager的事件冲突
- [转载] python 字符串(string)