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支持的数据类型的主要内容,如果未能解决你的问题,请参考以下文章