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数据类型的更多相关文章

  1. MySQL数据类型——数值类型

    1.1.1 整型 整型 占用字节 范围 范围 tinyint 1 -27~27-1 -128~127 smallint 2 -215~215-1 -32768~32767 mediumint 3 -2 ...

  2. Oracle、SQL Server、MySQL数据类型对比

    1,标准SQL数据类型 BINARY 每个字符占一个字节 任何类型的数据都可存储在这种类型的字段中.不需数据转换(例如,转换到文本数据).数据输入二进制字段的方式决定了它的输出方式. BIT 1 个字 ...

  3. DF学Mysql(三)——Mysql数据类型

    Mysql数据类型分为:整数类型.浮点数类型.定点数类型日期与时间类型字符串类型二进制类型 整数类型 字节数 无符号数取值范围 有符号数取值范围TINYINT 1 0-255 -128-127SMAL ...

  4. MySQL数据类型--日期时间

    一.博客前言 自接触学习MySQL已有一段时间了,对于MySQL的基础知识还是略懂略懂的.在这一路学习过来,每次不管看书还是网上看的资料,对于MySQL数据类型中的时间日期类型总是一扫而过,不曾停下来 ...

  5. 第四章 MySQL数据类型和运算符

    5.1 MySQL数据类型介绍 一.数据类型简介 (1) 数据表由多列字段构成,每一个字段指定了不同的数据类型,指定了数据类型之后,也就决定了向字段插入的数据内容 (2) 不同的数据类型也决定了 My ...

  6. mysql数据类型和基础语句

    阅读目录 转载 https://www.cnblogs.com/Eva-J/articles/9683316.html 数值类型 日期时间类型 字符串类型 ENUM和SET类型 返回顶部 数值类型 M ...

  7. mysql数据类型(三)

    MySQL 数据类型 MySQL中定义数据字段的类型对你数据库的优化是非常重要的. MySQL支持多种类型,大致可以分为三类:数值.日期/时间和字符串(字符)类型. 数值类型 MySQL支持所有标准S ...

  8. MySQL(数据类型和完整约束)

    MySQL数据类型 MySQL支持多种数据类型,主要有数值类型.日期/时间类型和字符串类型. 1.数值数据类型 包括整数类型TINYINT.SMALLINT.MEDIUMINT.INT.BIGINT. ...

  9. MySQL 数据类型(转)

    MySQL 数据类型 在 MySQL 中,有三种主要的类型:文本.数字和日期/时间类型. Text 类型: 数据类型 描述 备注 CHAR(size) 保存固定长度的字符串(可包含字母.数字以及特殊字 ...

  10. Mysql数据类型、约束、存储引擎

    一.数据类型 整数类型 默认有符号的 设置为无符号 1.create table t2(age tinyint unsigned); 2.建表后用alter修改 tinyint[(m)] [unsig ...

随机推荐

  1. hibernate基于注解实现映射关系的配置

    关联关系的配置步骤 ①要理清楚管理关系 ②确定管理依赖关系的哪一方 1一对一例如:person 和IdCard ①确定依赖关系:一对一 ②依赖关系由person类管理代码如下: person: @En ...

  2. MySQL Bugs: #34354: Feature request: EXPLAIN ALTER TABLE https://bugs.mysql.com/bug.php?id=34354

    MySQL Bugs: #34354: Feature request: EXPLAIN ALTER TABLE https://bugs.mysql.com/bug.php?id=34354 [SQ ...

  3. The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path(Myeclipse添加Server Library)

    网上找练习的项目导入到myeclipse项目发现每个JSP 出现错误The superclass "javax.servlet.http.HttpServlet" was not ...

  4. (1.3)DML增强功能-Apply、pivot、unpivot、for xml path行列转换

    深入了解行列转换请参考另一篇文章:https://www.cnblogs.com/gered/p/9271581.html 总结: 1.apply一般形式 --基本形式 SELECT a FROM d ...

  5. centos linux系统日常管理3 服务管理ntsysv,chkconfig,系统日志rsyslog,last ,lastb ,exec,xargs,dmesg,screen,nohup,curl,ping ,telnet,traceroute ,dig ,nc,nmap,host,nethogs 第十六节课

    centos linux系统日常管理3  服务管理ntsysv,chkconfig,系统日志rsyslog,last ,lastb ,exec,xargs,dmesg,screen,nohup,cur ...

  6. SLAM for Dummies SLAM初学者教程 中文翻译 1到4章

    SLAM for Dummies  SLAM初学者教程A Tutorial Approach to Simultaneous Localization and Mapping  一本关于实时定位及绘图 ...

  7. Linux下编译安装PHP扩展redis

    [Redis] 先安装tcl: yum install tcl [下载和安装] 官网http://redis.io/  下载最新的稳定版本,这里是3.2.0, 然后解压文件并进入. $ sudo ta ...

  8. 一、Mosquitto 介绍&安装

    一.Mosquitto 介绍 一款实现了消息推送协议 MQTT v3.1 的开源消息代理软件,提供轻量级的,支持可发布/可订阅的的消息推送模式,使设备对设备之间的短消息通信变得简单,比如现在应用广泛的 ...

  9. curl获取远程文件内容

    curl获取远程文件内容 ** 获取远程文件内容 @param $url 文件http地址 * function fopen_url($url) { if (function_exists(& ...

  10. 2018 Multi-University Training Contest 1 Solution

    A - Maximum Multiple 题意:给出一个n 找x, y, z 使得$n = x + y +z$ 并且 $n \equiv 0 \pmod x, n \equiv 0 \pmod y, ...