MySQL:数据类型介绍
数据类型介绍
一、整数类型(可以添加自增约束条件)
数据类型 |
存储需要 |
有符号 |
无符号 |
tinyint |
1个字节 |
-2^7~2^7-1 |
0~2^8 |
smallint |
2个字节 |
-2^15~2^15-1 |
0~2^16 |
mediumint |
3个字节 |
-2^23~2^23-1 |
0~2^24 |
int |
4个字节 |
-2^31~2^31-1 |
0~2^32 |
bigint |
8个字节 |
-2^63~2^63-1 |
0~2^64 |
可以根据占用字节数可以求出每一个数据类型的取值范围,
- 例:TINYINT需要1个字节(8bits)来存储,那么TINYINT无符号号数的最大值为2^8-1,即255;有符号数的最大值为2^7-1,即127.
- 例:year int(4),该声明指明,在year字段中的数据一般只显示4位数字的宽度。
注意:
- 显示宽度和数据类型的取值范围无关。
- 显示宽度只是指明mysql最大可能显示的字数个数,当数值的位数小于指定的宽度由空格填充;如果插入大于显示宽度的值,只要该值不超过该类型整数的取值范围,数值依然可以插入,而且能够显示出来
例:int(3)占用4个字节的存储空间,并且最大值不是999,而是int的最大值。
- 整型的默认值,系统将添加不同的默认显示宽度。保证显示每一种数据类型可以取到取值范围内的所有值。
例: TINYINT有符号和无符号的取值范围分别为-128~127和0~125,由于负号占一个数字位,因此TINYINT默认的显示宽度为4.
二、浮点数类型和定点数类型
类型名称 |
说明 |
存储需求 |
float |
单精度浮点数 |
4个字节 |
double |
双精度浮点数 |
8个字节 |
decimal (M,D),DEC |
压缩的‘严格’定点数 |
M+2个字节 |
注意:
(1)Decimal
decimal实际是以串存放的,decimal可能最大取值范围和double一样,但其有效的取值范围有M和D的值决定。
M:称为精度,表示总共的位数
D:称为标度,是表示小数的位数
m变大,d不变,取值范围增大
(2)当用户指定的精度超出精度范围时,浮点数和定点数都会进行四舍五入处理。
(3)浮点数相对于定点数的优点是在长度一定的情况下,浮点数能够表示更大的数据类型;缺点会引起精度问题。所以在货币和科学数据等用定点数更合适。
(4)float和double在不指定精度时,默认按照实际精度;decimal如不指定精度时默认为(10,0)
(5)浮点数相对于定点数的优点是在长度一定时,浮点数能够表示更大的数据范围,缺点引起精度问题
(6)不要使用浮点数比较,容易造成精度缺失。
三、日期与时间类型(要加单引号)
类型名称 |
日期格式 |
日期范围 |
存储需求 |
Year |
YYYY |
1901~2155 |
1字节 |
Time |
HH:MM:SS |
-838:59:59~838:59:59 |
3字节 |
Date |
YYYY-MM-DD |
1000-01-01~9999-12-3 |
3字节 |
Datetime |
YYYY-MM-DD HH:MM:SS |
1000-01-01 00:00:00 ~9999-12-31 23:59:59 |
8字节 |
Timestamp |
YYYY-MM-DD HH:MM:SS |
1970-01-01 00:00:01 UTC~2038-01-19 03:14:07 UTC |
4字节 |
1、Year
a.以4位字符串或者4位数字表示year,范围为‘1901’~‘2155’。输入格式为‘yyyy’或者yyyy,例,输入‘2010’或2010,插入到数据库的值均为2010。
b.以2位字符串表示year,范围为‘00’~‘99’。‘00’~‘69’和‘70’~‘99’范围的值分别被转化为2000~2069和1970~1999范围的year值。‘0’与‘00’的作用相同。插入超过取值范围的值将被转化为2000.
c.以2位数字表示year,范围为1~99。1~69和70~99范围的值分别被转化为2001~2069和1970~1999范围的year值。0被转化为0000。插入超过取值范围的值将被转化为2000.?
2、Time
HH表示小时;MM表示分钟;SS表示秒;
Time类型不仅可以表示一天时间(必须小于24小时),还可以是某个事件过去的时间或两个事件之间的时间间隔(可以大于24小时,甚至是负)
a、DHH:MM:SS’D表示日,可以取0~34之间的值。在插入数据库时,D被转化为小时保存,格式为‘D*24+HH’。
b、HHMMSS’格式的、没有间隔符的字符串或者HHMMSS格式的数值,假定是有意义的时间。例:‘101112’被理解为‘10:11:12’,但‘109712’是不合法的(它有一个没有意义的分钟部分),存储时将变为00:00:00.
c、如果没有冒号,mysql解释值时,假定最右边的两位表示秒。例‘1112’表示00:11:12(11分12秒);‘12’或12解释为00:00:12。加冒号‘11:12’表示11:12:00。
3、Date
a、使用current_date或者now(),插入当前系统日期。
b、以‘YYYY-MM-DD’或者YYYYMMDD表示的日期,取值范围为‘1000-01-01’~‘9999-12-3’
c、以‘YY-MM-DD’或者YYMMDD表示的日期,‘00~69’转化为‘2000~2069’;‘70~99’转化为‘1970~1999’。
d、如果插入datatime或者timestamp格式数据,值的时间部分被删除。
4、Datetime
a、YYYYMMDDHH:MM:SS 或者‘YYYYMMDD HH:MM:SS’取值范围‘1000-01-01 00:00:00’~‘9999-12-323:59:59’
b、YY-MM-DDHH:MM:SS或者‘YY-MM-DD HH:MM:SS’年值如前面一样
c、YYYYMMDDHHMMSS或者‘YYYYMMDDHHMMSS’年值如前面一样
d.、如果插入data格式数据,值的时间部分为‘00:00:00’。
5、Timestamp
与Datetime像似
两者不同点:
Datetime:与时区无关 Timestamp:与时区有关
Timestamp:如果插入data格式数据,值的时间部分为‘00:00:00’。
四、字符串类型
1、介绍
字符串类型除了可以存储字符串数据之外,还可以存储声音和图片
2、注意:
Varchar、blob和text类型是变长类型,对于其存储需求取决于列值的实际长度,而不是取决于类型的最大可能尺寸类型
3、类型:
(1)Char和varchar
char(n) 固定长度字符串(文本)
varchar(n) 可变长度字符串(文本)
注意:
- n表示可存放的最大字符数(不区分中英文)
- 在数据长度等于n时,char与varchar是一样的
- 在数据长度小于n时,char的存储长度是n,不足部分补“空格”;varchar是数据的实际长度。但是,在把char类型数据从表里取出时,MySQL会自动把字符串末尾的空格全部去除。
- 在数据长度大于n时,char和varchar都是“出错的”
- 关于保存的字符串的长度n
- char(n) 1<=n<=255字符(不管中英文)
- varchar(n) 占用存储空间小于等于65532字节,n取决于字符集
- 英文字符集,n代表字符数/字节数(1个字符占一个字节空间)0<n<=65532
- 中文字符集
- utf-8字符集,一个字符由3个字节表示,0<n<=21844
- GBK,一个字符由2个字节表示,0<n<=32766
特点:
- char的优点是检索数据速度快
- varchar的优点是存储数据节约空间
(2)text类型
Text类型保存非二进制字符串,如文章内容,评论。
(3)Enum类型
格式:
字段名 enum(‘值1’,‘值2’…)
说明:
- Enum是一个字符串对象,其值为表创建时在列规定中枚举的一列值。
- 在内部用整数表示,列表中每一个值都有一个索引编号。
五、Set类型
格式:
set(‘值1’,‘值2 ’…‘值n’)
注意:
- Set是一个字符串对象,可以有零或多个值,set列最多可以有64个成员,
- 其值为表创建时规定的一列值。
- 指定包括多个set成员的set值时,各成员之间用逗号(,)间隔开。
- 在插入set值有重复的值,将被自动删除重复的值。
- 如果值不正确,MySQL将自动忽略这些值,并发出警告。
- 当创建表时,set成员值尾部的空格将自动被删除。
与Enum的异同点:
- 相同点:与Enum相似内部用整数表示,列表中每一个值都有一个索引编号。
- 不同点:Enum类型字段只能从定义的列值中选择一个值插入,而set类型的列可从定义的列值中选择多个字符的联合。
六、二进制类型
类型名称 |
说明 |
存储需求 |
Bit(M) |
位字段类型 |
大约(M+7)/8字节 |
Binary(M) |
固定长度二进制字符串 |
M个字节 |
Varbinary(M) |
可变长度二进制字符串 |
M+1个字节 |
Tinyblob(M) |
非常小的blob |
L+1个字节,在此L<2^8 |
Blob(M) |
小blob |
L+2个字节,在此L<2^16 |
MEDIUMBLOB(M) |
中等大小的blob |
L+3个字节,在此L<2^24 |
LONGBLOB(M) |
非常大的blob |
L+4个字节,在此L<2^32 |
M表示每个值的位数,范围为1~64.如果M被省略,默认为1.
1、BIT类型
- 如果为bit(M)列分配的值小于M位,在值左边用0填充。例:bit(6)列分配一个值b’101’,其效果与分配b’000101’相同。
- Bit类型保存位字段值,例如:以二进制的显示保存的数据13,13的二进制为1101,在这里需要位数至少为4位的bit类型,即可定义列类型为bit(4),大于二进制1111的数据是不能插入bit(4)类型的字段中。
2、Binary和varbinary类型
- 格式:列名称 binary(M)或者varbinary(M)
- 与char和varchar相似
(3)Blob类型
BLOB没有字符集,并且排序和比较基于列值字节的数值
MySQL:数据类型介绍的更多相关文章
- mysql数据类型介绍
一.int.bigint.smallint 和 tinyint的区别详细介绍 bigint 从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854 ...
- mysql数据类型介绍(含text,longtext,mediumtext说明)
转自http://m.blog.csdn.net/sipsir/article/details/12343581 转载,文章原连接已经失效,百度快照找到的. MySQL支持大量的列类型,它可以被分为3 ...
- 第四章 MySQL数据类型和运算符
5.1 MySQL数据类型介绍 一.数据类型简介 (1) 数据表由多列字段构成,每一个字段指定了不同的数据类型,指定了数据类型之后,也就决定了向字段插入的数据内容 (2) 不同的数据类型也决定了 My ...
- MySQL数据类型及使用场景
MySQL数据类型介绍 整数类型 类型名称 说明 存储需求 取值范围有符号 取值范围符号 TINYINT 很小的整数 1个字节 -128~127 0-255 SMALLINT 小的整数 2个字节 32 ...
- 🚴♂️全套MySQL数据库教程_Mysql基础入门教程,零基础小白自学MySQL数据库必备教程☔ #002 # 第二单元 MySQL数据类型、操作表#
二.本单元知识点概述 (Ⅰ)知识点概述 二.本单元教学目标 (Ⅰ)重点知识目标 1.Mysql的数据类型2.如何选择数据类型3.创建表4.修改表5.删除表 (Ⅱ)能力目标 1.熟练创建数据库及删除数据 ...
- MYSQL中数据类型介绍
一.MySQL的数据类型 主要包括以下五大类: 主要包括以下五大类: 整数类型:bit. int . bit int . small int . tiny int . medium int .boo ...
- MySQL 中的数据类型介绍
1.MySQL 数据类型 MySQL中定义数据字段的类型对你数据库的优化是非常重要的. MySQL支持多种类型,大致可以分为三类:数值.日期/时间和字符串(字符)类型. 2.数值类型(12) 2.1. ...
- MySQL数据库学习笔记(二)----MySQL数据类型
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...
- 转!!MYSQL数据类型
这篇文章主要介绍了MySQL数据类型和常用字段属性总结,本文总结了日期和时间数据类型.数值数据类型.字符串数据类型等,需要的朋友可以参考下 前言 好比C++中,定义int类型需要多少字节,定义 ...
随机推荐
- linux搭建smb、挂载smb、Windows共享
实现Linux系统之间共享文件资源以及在Linux系统与Windows系统之间共享文件 Samba软件包的构成 服务端:samba 客户端:samba-client 公共组件:samba-common ...
- 『MXNet』第八弹_数据处理API_上
一.Gluon数据加载 下面的两个dataset处理类一般会成对出现,两个都可做预处理,但是由于后面还可能用到原始图片,.ImageFolderDataset不加预处理的话可以满足,所以建议在.Dat ...
- spring boot(十八)集成FastDFS文件上传下载
上篇文章介绍了如何使用Spring Boot上传文件,这篇文章我们介绍如何使用Spring Boot将文件上传到分布式文件系统FastDFS中. 这个项目会在上一个项目的基础上进行构建. 1.pom包 ...
- 【JS】【1】JavaScript屏蔽Backspace键(避免点击后页面产生回退)
前言: 1,参考资料:JavaScript屏蔽Backspace键 - 孤傲苍狼 - 博客园(http://www.cnblogs.com/xdp-gacl/p/3785806.html) 2,参考的 ...
- java动态代理机制
首先了解代理设计模式,其思想是为其他对象提供一种代理以控制对这个对象的访问. java动态代理就是遵循这种思想,spring中的AOP实现原理就是java的动态代理. 在java的动态代理机制中,有两 ...
- Http简单解析过程
1.域名解析:浏览器先搜索自身的DNS缓存->搜索操作系统自身的DNS缓存(浏览器没有找到缓存或缓存已经失效)->读取本地host文件(操作系统DNS也没找到)->浏览器发起DNS的 ...
- 快速学习HTML
1.先写基本的框架标签 2.HTML基本标签 段落标签 <p></p> 空格标签 标题标签 <h1></h1>……<h6></h6 ...
- 十四、MVC的WEB框架(Structs2)
一.Structs2中的Session 1.一个是传统的servlet包下的HttpSession,一个是Structs2中自己定义的Session Servlet下的Session获取方法:Serv ...
- 开发环境转Mac FAQ
vs2017 for mac, 默认的源代码管理工具是git, 不是svn, 安装source tree,注册bitbucket(免费1G私有空间),整合的比较好(国内的码云也能支持,不过是用账号密码 ...
- 查验身份证 (15 分) 一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下: 首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};然后将计算的和对11取模得到值Z;最后按照以下关系对应Z值与校验码M的值:
// test4.cpp : 此文件包含 "main" 函数.程序执行将在此处开始并结束.// #include "pch.h"#include <ios ...