2-14-2 MySQL数据类型
MySQL数据类型:
对数据进行分类,针对不同分类进行不同的处理.
1. 使系统能够根据数据类型来操作数据.
2. 预防数据运算时出错.
3. 更有效的利用空间。
数据分类,可以使用最少的存储,来存放数据,同时提高了性能。
定义数据类型的本质上是在定义列
MySQL数据类型分类:
两大类: 整型 和 浮点型;
类型 |
大小 |
范围(有符号) |
范围(无符号) |
用途 |
TINYINT |
1 字节 |
(-128,127) • 2的n-1次方-1(有符号的范围) 2^7-1 • 2的n次方-1(无符号的范围)2^8-1
|
(0,255) 2^8-1 |
小整数值 |
SMALLINT |
2 字节 |
(-32 768,32 767) |
(0,65 535) 2^16-1 |
大整数值 |
MEDIUMINT |
3 字节 |
(-8 388 608,8 388 607) |
(0,16 777 215) |
大整数值 |
INT或INTEGER |
4 字节 |
(-2 147 483 648,2 147 483 647) |
(0,4 294 967 295)2^32-1 |
大整数值 |
BIGINT |
8 字节 |
(-9 233 372 036 854 775 808,9 223 372 036 854 775 807) |
(0,18 446 744 073 709 551 615) |
极大整数值 |
FLOAT |
4 字节 |
(-3.402 823 466 E+38,1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) |
0,(1.175 494 351 E-38,3.402 823 466 E+38) |
单精度 |
DOUBLE |
8 字节 |
(1.797 693 134 862 315 7 E+308,2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) |
0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) |
双精度 |
##########################################################
##########################################################
类型 |
大小范围 |
用途 |
存储需求 |
CHAR(M) |
0-255 bytes |
定长字符串 |
M bytes 1<=M<=255 |
VARCHAR(M) |
0~65535 bytes |
变长字符串 |
L+1 bytes L<=M且1<=M<=255 |
TINYBLOB小二进制 |
0-255 bytes |
不超过 255 个字符的二进制字符串 |
L+1 bytes L<28 |
TINYTEXT |
0-255 bytes |
短文本字符串 |
L+1 bytes L<28 |
BLOB大二进制 |
0-65 535 bytes |
二进制形式的长文本数据 |
L+2 bytes L<216 |
TEXT |
0-65 535 bytes |
长文本数据 |
L+2 bytes L<216 |
MEDIUMBLOB |
0-16 777 215 bytes |
二进制形式的中等长度文本数据 |
L+3 bytes L<224 |
MEDIUMTEXT |
0-16 777 215 bytes |
中等长度文本数据 |
L+3 bytes L<224 |
LONGBLOB |
0-4 294 967 295 bytes |
二进制形式的极大文本数据 |
L+4 bytes L<232 |
LONGTEXT |
0-4 294 967 295 bytes |
极大文本数据 |
L+4 bytes L<232 |
ENUM |
1~2 bytes |
枚举类型 |
1 or 2 bytes |
SET |
1~8 bytes |
一个设置 |
1/2/3/4/8 bytes,取决于集合成员数量 |
整型<INT 类型>
在MySQL中支持的5个主要整数类型是 TINYINT,SMALLINT,MEDIUMINT, INT和BIGINT。这些类型在很大程度是相同的,只有他们存储的值的大小是不同的
整型属性<修饰符>:
unsigned 无符号整数,修饰符: 规定字段只能保存正的数据。它可以增大这个字段的正数支持的范围。
tinyint unsigned 可以存储的范围是0-255,而tinyint的存储范围是-128-127
zerofill 修饰符: 规定0(不是空格 ) 填补输出的值。 使用这个值可以防止 mysql存储负值。
int(M) 在 integer 数据类型中,M 表示最大显示宽度。
在 int(M) 中,M 的值跟 int(M) 所占多少存储空间并无任何关系。 int(3)、int(4)、int(8) 在磁盘上都是占用 4 btyes 的存储空间。其实,除了显示给用户的方式有点不同外,int(M) 跟 int 数据类型是相同的。M值最大255
如果int的值为10 ,使用zerofill修饰后:
int(10)显示结果为0000000010
int(3)显示结果为010
就是显示的长度不一样而已 都是占用四个字节的空间,可以使用的空间也一样。
默认使用空格填充,不方便显示出来。
注:当我们产成固定长度的序列号时,可以使用zerofill。 如:卡号
浮点型
主要有float<单精度>, double<双精度>,decimal<精确指定>
Float和double是浮点型,数值越大越不精确
Decimal是定点数,常用来存储财务工资方面,高精度
float(3,1) :表示此字段有效位数为3位,整数占两位,小数点后面占1位 。小数点后超过1位,mysql自动四舍五入。占4个字节存储
double :8个字节来存储
decimal: 用来存储精确的小数,消耗空间,运算慢,一般想办法使用bigint替代它
9823912.382 mm = X * 1000 = 9823912382
Select mm/1000 from table
字符串类型
Char(m)
保存固定长度的字符串(可包含字母、数字以及特殊字符)。在括号中指定字符串的长度。最多 255 个字符。
Varchar(n)
保存可变长度的字符串(可包含字母、数字以及特殊字符)。在括号中指定字符串的最大长度。最多 255 个字符。注释:如果值的长度大于 255,则被转换为 TEXT 类型。
TEXT类型存放最大长度为 65,535 个字符的字符串
区别:
char 比varchar占空间,但效率要好
空间:char固定长度,小于长度,空格自动补齐,大于长度,自动截短.没有varchar节省空间
效率:varchar修改数据时,由于长度是动态的,会导致数据迁移,增加IO
字符串类型修饰符:
binary 修饰符: 区分字符大小。比较char类型以一个二进制方式起作用。
总结:char和varchar区别:
CHAR(M)定义的列的长度为固定的,M取值可以为0~255之间,当保存CHAR值时,在它们的右边填充空格以达到指定的长度。当检索到CHAR值时,尾部的空格被删除掉。
VARCHAR(M)定义的列的长度为可变长字符串,M取值可以为0~65535之间,(VARCHAR的最大有效长度由最大行大小和使用的字符集确定。整体最大长度是65,532字节)。
VARCHAR值保存时只保存需要的字符数,另加一个字节来记录长度(如果列声明的长度超过255,则使用两个字节)。VARCHAR值保存时不进行填充。当值保存和检索时尾部的空格仍保留,符合标准SQL。
例:
VARCHAR(10),实际长度是它的值的实际长度+1。为什么"+1"呢?这一个字节用于保存实际使用了多大的长度。如果列声明的长度超过255,则使用两个字节。
从空间上考虑,用varchar合适;从效率上考虑,用char合适。
对于不同存储引擎有不同的说法:
对于MyISAM表,尽量使用Char,对于那些经常需要修改而容易形成碎片的myisam和isam数据表就更是如此,它的缺点就是占用磁盘空间;
对于InnoDB表,因为它的数据行内部存储格式对固定长度的数据行和可变长度的数据行不加区分(所有数据行共用一个表头部分,这个表头部分存放着指向各有关数据列的指针),所以使用char类型不见得会比使用varchar类型好。事实上,因为char类型通常要比varchar类型占用更多的空间,所以从减少空间占用量和减少磁盘i/o的角度,使用varchar类型反而更有利.
TEXT类型
•TEXT类型及其子类型用于存储比较长的非二进制字符串。例如:
•文章
•评论
•你可以把TEXT类型理解为VARCHAR的加长增强版。
•TEXT类型不区分大小写。
复合类型
它们字段的值,必须 从预先定义好的字符串集合中选取。
ENUM(枚举): ENUM类型存储的数据好比是单项选择题里的选项。其存储的值为表创建时在列规定中枚举的一列值。
只能取一个。用于互斥。 男人,女人。
create table ckdata8(sex enum('M','F'));
Set类型:能选取多个
create table ckdata9(type set('a','b','c','d','e'));
# 不能有一样的元素,有的话,无效。
# 如果不存在些元素, 以空白 来表示
注:set 类型: 最包64类项。 在set中,相关的元素不能同时存在。
日期和时间类型
date类型
日期。格式:YYYY-MM-DD
注释:支持的范围是从 '1000-01-01' 到 '9999-12-31'
Create table ckdata10 (riqi date)
mysql> insert into ckdata10 values('2015-10-23'),(20180925);
mysql> insert into ckdata10 value('2015-10-23'),(20180925);
两者区别不大,一般还是用values
time类型
year类型
datetime类型timestamp类型
datetime类型能保存大范围的值,从1001年到9999年,精度为秒,它把日期和时间封装到格式为YYYY-MM-DD HH:MM:SS的整数中,与时区无关,使用8个字节的存储空间
timestamp类型保存了从1970年1月1日午夜(格林尼治时间) 以来的秒数
它和linux时间戳相同,timestamp只使用了4个字节的存储空间,因此它的范围比datetime小的多,只能表示从1970-2038,通常我们还是用它的,提高空间利用率
常用总结:
整型
tinyint,占1字节,有符号:-128~127,无符号位:0~255
smallint,占2字节,有符号:-32768~32767,无符号位:0~65535
mediumint,占3字节,有符号:-8388608~8388607,无符号位:0~16777215
int,占4字节,有符号:-2147483648~2147483647,无符号位:0~4284967295
bigint,占8字节
bool 等价于tinyint(1) 布尔型
浮点型
float([m[,d]]) 占4字节,1.17E-38~3.4E+38
double([m[,d]]) 占8字节
decimal([m[,d]]) 以字符串形式表示的浮点数
字符型
char([m]):定长的字符,占用m字节
varchar[(m)]:变长的字符,占用m+1字节,大于255个字符:占用m+2
tinytext,255个字符(2的8次方)
text,65535个字符(2的16次方)
mediumtext,16777215字符(2的24次方)
longtext,(2的32次方)
enum(value,value,...)占1/2个字节 最多可以有65535个成员
set(value,value,...)占1/2/3/4/8个字节,最多可以有64个成员
扩展:linux时间戳
显示时间戳:
[root@server01 ~]# date +%s
1444124814
显示指定时间的时间戳
[root@server01 ~]# date -d "2015-10-06 17:48:23" +%s
1444124903
[root@server01 ~]# date -d "1970-01-01 08:00:00" +%s
0
时间戳转日期
[root@server01 ~]# date -d"@1455455465"
Sun Feb 14 21:11:05 CST 2016
[root@server01 ~]# date -d"@1455455465" "+%Y/%m/%d %H:%M:%S"
2016/02/14 21:11:05
[root@server01 ~]# date -d"@1455455465" "+%Y-%m-%d %H:%M:%S"
2016-02-14 21:11:05
2-14-2 MySQL数据类型的更多相关文章
- MySQL数据类型——数值类型
1.1.1 整型 整型 占用字节 范围 范围 tinyint 1 -27~27-1 -128~127 smallint 2 -215~215-1 -32768~32767 mediumint 3 -2 ...
- Oracle、SQL Server、MySQL数据类型对比
1,标准SQL数据类型 BINARY 每个字符占一个字节 任何类型的数据都可存储在这种类型的字段中.不需数据转换(例如,转换到文本数据).数据输入二进制字段的方式决定了它的输出方式. BIT 1 个字 ...
- DF学Mysql(三)——Mysql数据类型
Mysql数据类型分为:整数类型.浮点数类型.定点数类型日期与时间类型字符串类型二进制类型 整数类型 字节数 无符号数取值范围 有符号数取值范围TINYINT 1 0-255 -128-127SMAL ...
- MySQL数据类型--日期时间
一.博客前言 自接触学习MySQL已有一段时间了,对于MySQL的基础知识还是略懂略懂的.在这一路学习过来,每次不管看书还是网上看的资料,对于MySQL数据类型中的时间日期类型总是一扫而过,不曾停下来 ...
- 第四章 MySQL数据类型和运算符
5.1 MySQL数据类型介绍 一.数据类型简介 (1) 数据表由多列字段构成,每一个字段指定了不同的数据类型,指定了数据类型之后,也就决定了向字段插入的数据内容 (2) 不同的数据类型也决定了 My ...
- mysql数据类型和基础语句
阅读目录 转载 https://www.cnblogs.com/Eva-J/articles/9683316.html 数值类型 日期时间类型 字符串类型 ENUM和SET类型 返回顶部 数值类型 M ...
- mysql数据类型(三)
MySQL 数据类型 MySQL中定义数据字段的类型对你数据库的优化是非常重要的. MySQL支持多种类型,大致可以分为三类:数值.日期/时间和字符串(字符)类型. 数值类型 MySQL支持所有标准S ...
- MySQL(数据类型和完整约束)
MySQL数据类型 MySQL支持多种数据类型,主要有数值类型.日期/时间类型和字符串类型. 1.数值数据类型 包括整数类型TINYINT.SMALLINT.MEDIUMINT.INT.BIGINT. ...
- MySQL 数据类型(转)
MySQL 数据类型 在 MySQL 中,有三种主要的类型:文本.数字和日期/时间类型. Text 类型: 数据类型 描述 备注 CHAR(size) 保存固定长度的字符串(可包含字母.数字以及特殊字 ...
- Mysql数据类型、约束、存储引擎
一.数据类型 整数类型 默认有符号的 设置为无符号 1.create table t2(age tinyint unsigned); 2.建表后用alter修改 tinyint[(m)] [unsig ...
随机推荐
- Pentaho Report Designer 数据大于某值显示红色
在细节栏中的字段的属性, 在样式的text-color,右边的表达式 输入下面表达式即可! =IF( [ALL_VALUE] > 50 ; "black" ; IF([ALL ...
- 玩转JavaScript Callback函数
如果你对Jquery没有足够的经验,但是你又用过JQuery,这么来说没你已经用过了回调函数了.但是你可能不知道它是如何工作和实现的. 这篇文章主要基于我所了解的回调函数,我试图启发大家基于最常规的J ...
- 安卓中通知(Notification)的基本使用方法
1. 通知的使用场合 当某个应用程序希望向用户发出一些提示信息,而该应用程序又不在前台运行时,就可以借助通知来实现.发出一条通知后,手机最上方的状态栏中会显示一个通知的图标,下拉状态栏后可以看到通知的 ...
- codeforces#505--A Doggo Recoloring
A. Doggo Recoloring time limit per test 1 second memory limit per test 256 megabytes input standard ...
- hihoCoder_1445_后缀自动机二·重复旋律5
#1445 : 后缀自动机二·重复旋律5 时间限制:10000ms 单点时限:2000ms 内存限制:512MB 描述 小Hi平时的一大兴趣爱好就是演奏钢琴.我们知道一个音乐旋律被表示为一段数构成的数 ...
- Oracle安装部署之RAC安装环境配置脚本
#!/bin/bash#Usage:Log on as the superuser('root'),and then execute the command:#./1preusers.sh group ...
- ubuntu打开txt乱码
因为不支持中文 输入命令: iconv -f gbk -t utf8 filename.txt > filename.txt.utf8
- 第二次作业(WordCount)
1 Github项目地址:https://gitee.com/DamonGetup/WordCount/tree/master 2 对程序设计语言源文件统计字符数.单词数.行数,统计结果以指定格式输出 ...
- 从LayoutInflater分析XML布局解析成View的树形结构的过程
上一篇博客分析了XML布局怎么载入到Activity上.不了解的能够參考 从setContentView方法分析Android载入布局流程 上一篇博客仅仅是分析了怎么讲XML布局加入到 Activit ...
- centos LNMP第一部分环境搭建 LAMP LNMP安装先后顺序 php安装 安装nginx 编写nginx启动脚本 懒汉模式 mv /usr/php/{p.conf.default,p.conf} php运行方式SAPI介绍 第二十三节课
centos LNMP第一部分环境搭建 LAMP安装先后顺序 LNMP安装先后顺序 php安装 安装nginx 编写nginx启动脚本 懒汉模式 mv /usr/local/php/{ ...