MySQL中的数据类型
本节内容
- 数值类型
- tinyint类型
- bit类型
- 小数类型
- float
- decimal
- 字符串类型
- char
- varchar
- char和varchar存储空间比较
- 日期和时间类型
- enumn和set
数值类型
一、tinyint类型
- 在mysql 中,整型可以指定是有符号的和无符号的,默认是有符号的。
- 带符号的范围是:-128 ~ +127
- 无符号的范围是:0 ~ 255
- 可以通过UNSIGNED来说明某个字段是无符号的。
- 尽量不使用unsigned.(因为当两个无符号类型的数相减时,会出现结果变成最大整数的情况。导致越界)
- 对于int 类型可能存放不下的数据,int unsigned 同样可能存放不下,所以,还不如在设计时,将int类型提升为bigint类型。
二、bit(M)类型
- 位字段类型。M 表示每个值的位数,范围从1 ~ 64。如果M被忽略,默认为1.
- bit字段在显示时,是按照ASCII码对应的值显示。
- bit(1)约定数据,只能存放0或1,目的是:节省空间。可以用bit(1)来表示男和女:sex bit(1);
三、小数类型
float
语法:
folat(m,d)[unsigned]
m:表示显示的长度;
d:表示指定的小数位数。
eg:float(4,2):-99.99 ~ 99.99
注意:
- 如果小数位数超了,浮点数保存时,mysql会自动四舍五入。
- unsigned 范围是:0 ~ 99.99
decimal
语法:
decimal(m,d)[unsigned]
mysql 推荐使用decimal表示浮点数。
注:
- decimal 中 m 最大位数是65, d 最大是30。
- d 被省略,默认是0;m被省略,默认是10.
- decimal有符号和无符号的表示范围和float的是一样的。
- decimal 精度更高,float 能表示的最大精度为小数点后7位。
- 如果希望小数的精度高,推荐使用 decimal.
字符串类型
一、char
语法:
char(L):定长字符串
L:能存储 1~255 个字符
- char(2):可以存储2个字符的字符串,中英文都可以。
- 当存放的数据位数小于定长字符串位数,还是按照定长位数来存储。
eg:char(2) ‘a’ ,保存的还是两个字符。
二、varchar
语法:
varchar(L):可变长度字符串
L:表示最大长度字符串。最大长度为65535个字节。
- varchar(5) ‘abc’ :实际存放的就是3个字符。
- mysql推荐使用变长字符串,节省空间。
- varchar长度可以指定为0到65535之间的值,但是有1 - 3 个字节用于记录数据大小,所以说有效字节数是65532。
- utf-8 下:一个字符=3个字节;L最大为65532/3=21844个字符(且要求数据表中没有其他类型数据)(因为在存储时,会在最前面预留3个字节来存储其结构)。
- gbk 下:一个字符=2个字节;所以L的最大值是65532/2=32766个字符。
- 要求变长字符串长度不超过35000字节,超过此字节,必须将varchar变成Test。
三、char 和 varchar 的存储空间比较:
- 如果存储数据时,数据长度都一样,就用定长字符串。检索效率高。
- 如果存储数据时,数据长度不确定,使用变长字符串。节省磁盘空间。
四、日期和时间类型
常用的日期有以下3个:
- datetime:”yyyy-mmm-dd HH:ii:ss” 8字节 日期时间类型
- date:日期类型 “yyyy-mm-dd” 占用3个字节
- timestamp:时间戳 “yyyy-mmm-dd HH:ii:ss” 4字节 UTC时间(无须手工插入或更新)每当数据库中有数据新增或更新时,时间戳会自动更新到当前时间。
五、enum(枚举) 与 set
enum 在数据库中表示单选。
- enum(‘选项1’,’选项2’,’选项3’,…);
- 该设定只是提供了若干个选项的值,最终一个单元格中,实际只存储了其中一个值。
- 出于效率考虑,存储数据时可以使用从1开始的数字下标来存储1,2,3,……,65535
set 在数据库中表示多选。
- set(‘选项1’,’选项2’,’选项3’,…);
- 插入数据时必须在同一个’ ‘中存储多个可选项。
- 插入数据,必须要在集合中有对应选项,否则,插不进去。
- find_in_set(‘要查找的数据项’,对应的set集合)
eg: find_in_set(‘a’,’a,b,c’)