MySQL中的数值类型
类型 | 字节 | 最小值 | 最大值 |
---|---|---|---|
TINYINT | 1 | 有符号-128,无符号0 | 有符号127,无符号255 |
SMALLINT | 2 | 有符号-32768,无符号0 | 有符号32767,无符号65535 |
MEDIUMINT | 3 | 有符号-8388608,无符号0 | 有符号8388607,无符号16777215 |
INT | 4 | 有符号-2147483648,无符号0 | 有符号2147483647,无符号4294967295 |
BIGINT | 8 | 有符号-232,无符号0 | 有符号232,无符号264 |
FLOAT | 4 | ||
DOUBLE | 8 | ||
DEC(M,D) | M+2 | 最大取值范围与DOUBLE相同,给定DECIMAL的有效取值范围由M和D决定 |
对于整数类型,MySQL支持在类型名称后面的小括号内指定显示宽度,例如int(5)表示当数值宽度小于5位的时候在数字前面填满宽度,如果不显示指定宽度则默认为int(11),一般配合zerofill使用。
当设置了宽度限制后,如果插入大于宽度限制的值,不会对插入的数据有任何影响,还是按照类型的实际精度进行报仇呢,此时宽度实际上没有意义。
MySQL分为两种方式:浮点数和定点数,定点数在MySQL内部以字符串形式存放,比浮点数更精确。(M,D)表示该值一共显示M位数字(整数位+小数位),其中D位位于小数点后面,M和D又称为精度和标度。MySQL保存值时进行四舍五入
日期时间类型
MySQL中有多种数据类型可以用于日期和时间的表示,
- 如果用来表示年月日,可以用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值不能早于1970或晚于2037。这说明一个日期,例如’1968-01-01’,虽然对于DATETIME或DATE值是有效的,但对于TIMESTAMP值却无效,如果分配给这样一个对象将被转换为0。
值以UTC格式保存( it stores the number of milliseconds)
时区转化 ,存储时对当前的时区进行转换,检索时再转换回当前的时区。
默认值为CURRENT_TIMESTAMP(),其实也就是当前的系统时间。
数据库会自动修改其值,所以在插入记录时不需要指定timestamp字段的名称和timestamp字段的值,你只需要在设计表的时候添加一个timestamp字段即可,插入后该字段的值会自动变为当前系统时间。
默认情况下以后任何时间修改表中的记录时,对应记录的timestamp值会自动被更新为当前的系统时间。
如果需要可以设置timestamp不自动更新。通过设置DEFAULT CURRENT_TIMESTAMP 可以实现。
字符串类型
字符串类型 | 字节 | 描述以及存储需求 |
---|---|---|
CHAR(M) | M | M为0~255之间的证书 |
VARCHAR(M) | M为0-65535之间的整数,值的长度+1个字节 | |
TINYBLOB | 允许长度0~255字节,值的长度+1个字节 | |
BLOB | 允许长度0~6553字节,值得长度+2个字节 | |
MEDIUMBLOB | 允许长度167772150字节,值的长度+3个字节 | |
LONGBLOB | 允许长度0~4294967295字节,值的长度+4个字节 | |
TINYTEXT | 允许长度0~255字节,值的长度+1个字节 | |
TEXT | 允许长度0~6553字节,值得长度+2个字节 | |
MEDIUMBLOB | 允许长度167772150字节,值的长度+3个字节 | |
LONGBLOB | 允许长度0~4294967295字节,值的长度+4个字节 | |
VARBINARY(M) | 允许长度0~M个字节的变长字节字符串,值的长度+1个字节 | |
BINARY(M) | M | 长度0~M个字节的定长字节字符串 |
CHAR和VARCHAR很类似,都用来保存MySQL中较短的字符串
不同之处
- CHAR列的长度固定为创建表时生命的长度,长度可以为0~255
- VARCHAR列的值为可变长字符串,长度可以指定为0~65535(MySQL5.0.3版本后)之间的任何值;
- 在检索时,VARCHAR保留尾部空格而CHAR则删除这些空格
ENUM类型
值范围需要在创建表时通过枚举方式显示指定。最多允许65535个成员;EMUN类型忽略大小写,插入不咋EMUN指定范围内的值时,默认选取第一个值;ENUM类型只允许从值集合中选取单个值,而不能一次选取多个值
SET类型
包含最高64个成员,可以选取多个。对于超出允许值范围的数据不允许注入到SET类型列中,而对于重复的成员集合只取一次。
《深入浅出MySQL数据库开发、优化与维护管理》;
互联网