MySQL支持的数据类型

Posted TooLateToLearn!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL支持的数据类型相关的知识,希望对你有一定的参考价值。

数值类型

整数类型 字节 最小值 最大值
TINYINT 1    
SMALLINT 2    
MEDIUMINT 3    
INT、INTEGER 4    
BIGINT 5    
浮点数类型      
FLOAT 4    
DOUBLE 8    
定点数类型      
DEC(M, D) M + 2 最大取值范围与double相同,给定DECIMAL的有效值范围由M和D决定
DECIMAL(M, D)
位类型      
BIT(M) 1 ~ 8 BIT(1) BIT(64)


P53)对于整型数据,mysql还支持在类型名称后面的小括号内指定位宽,例如int(5)表示当数值宽度小于5位的时候在数字前面填满宽度,如果不显示指定宽度则默认位int(11)。一般配合zerofill使用。zerofill就是用“0”填充的意思,也就是在数字位数不够的空间用字符“0”填满。

 

位宽对于插入数字的大小没有任何影响,不会截断超出位宽的部分,它依然按照int类型的实际精度进行保存,这时宽度格式已经没有任何意义,左边不会再填充任何的“0”字符。

 

如果一个列指定为zerofill,则MySQL自动为该列添加UNSIGNED属性。

 

P54)AUTO_INCREMENT

在插入NULL到一个AUTO_INCREMENT列时,MySQL插入一个比当前最大值大1的值。一个表中最多只能有一个AUTO_INCREMENT列。对于任何想要使用AUTO_INCREMENT的列,应该定义为NOT NULL,并定义为PRIMARY KEY或定义为UNIQUE键。

 


 

对于小数的表示,MySQL分为两种方式:浮点数和定点数。浮点数包括float(单精度)和double(双精度),而定点数则只有decimal一种表示。定点数在MySQL内部以字符串形式存放,比浮点数更精确,适合用来表示货币等精度高的数据。

 

浮点数和定点数都可以用类型名称后加“(M,D)”的方式进行表示,“(M,D)”表示该值一共显示M位数字(整数位+小数位),其中D位位于小数点后面,M和D又称为精度和标度。浮点数后面跟“(M,D)”的用法是非标准用法,如果要用于数据库的迁移,则最好不要这么使用。DECIMAL在不指定精度时,默认的整数位为10,默认的小数位为0。

 

在操作出现出现warning提醒时,可以通过show warnings;来显示发生了什么问题。

 


对于BIT(位)类型,用于存放位字段,BIT(M)可以用来存放多为二进制数,M范围从1~64,如果不写则默认为1位。对于位字段,直接使用SELECT命令将不会看到结果,可以用bin(column name)(显示为二进制格式)或者hex(column name)(显示为十六进制)函数进行读取。


 

日期时间类型

  • 年月日,通常用DATE来表示。
  • 年月日时分秒,通常用DATETIME表示。
  • 时分秒,通常用TIME表示。
日期和时间类型 字节 最小值 最大值
DATE 4 1000-01-01 9999-12-31
DATETIME 8 1000-01-01 00:00:00 9999-12-31 23:59:59
TIMESTAMP 4 19700101080001 2038年的某个时刻
TIME 3 -838:59:59 838:59:59
YEAR 1 1901 2155

如果需要经常插入或者更新日期为当前系统时间,则通常使用TIMESTAMP来表示,TIMESTAMP值返回后显示为“YYYY-MM-DD HH:MM:SS”格式的字符串,显示宽度固定为19个字符,如果想要获得数字值,应在TIMESTAMP列添加“+0”。

 

超出日期值的有效范围,在默认的SQLMode下系统会提示错误,并将以零值来进行存储。

 

now()函数返回当前的系统时间。

 

MySQL只给表中的第一个TIMESTAMP字段设置默认值为系统日期,如果有第二个TIMESTAMP类型,则默认值设置为0值。可以给其他列的TIMESTAMP默认值设为其他常量日期,但不能再修改为current_timestamp,因为MySQL规定TIMESTAMP类型的字段只能有一列的默认值为current_timestamp。

 

TIMESTAMP还有一个重要特点,就是和时区相关。当插入日期时,会先转换为本地时区后存放;而从数据库里面取出时,也同样需要将日期转换为本地时区后显示。这样,两个不同时区的用户看到的用一个日期可能是不一样的。

show variables like \'time_zone\';   查看当前时区 

 set time_zone=\'+9:00\';    修改时区为东九区

TIMESTAMPDE取值范围为19700101080001到2038年的某一天,因此它不适合存放比较久远的日期。


字符串类型 

char和varchar的区别在于char列的长度固定为创建表时声明的长度,长度可以从0~255的任何值,varchar列中的值为可变字符串长度可以指定为0~65535之间的值。在存储字符串时,char列删除了尾部的空格,而varchar则保留字符串尾部的空格。

 

BINARY和VARBINARY类似于CHAR和VARCHAR,不同的是它们包含二进制字符串而不包含非二进制字符串。当保存BINARY值时,在值的最后通过填充“0x00”(零字节)以达到指定的字段定义长度读取时不会删去填充的零字节)。

 


 

ENUM类型

最多允许有65535个成员。ENUM忽略大小写,还可以用数字代表枚举量的位置来进行插入。

 


 

SET类型

可以包含0~64个成员。根据成员个数不同,存储所占空间也不同,一个字节对应8个成员,以此类推。最主要的区别在于类型一次可以选取多个成员,而ENUM则只能选一个。SET类型允许从值集合中选择任意1个或多个元素进行组合,同时会去重。

 

以上是关于MySQL支持的数据类型的主要内容,如果未能解决你的问题,请参考以下文章

MySQL知识树-支持的数据类型

MySQL支持的数据类型

MySQL支持的数据类型

数据库 -- mysql支持的数据类型

mysql支持的数据类型

mysql支持的数据类型