一、数值类型
默认都是有符号,无符号要在对应的类型后跟unsigned
在语言上,可能会有截断,但mysql会对不合法的数据做拦截。所以,mysql中,数据类型本身也是一种约束(约束使用者),保证数据库中的数据是可预期的,完整的。
类型 | 字节 | 最小值 | 最大值 |
(有/无符号) | (有/无符号) | ||
TINYINT(tinyint) | 1 | -128 | 127 |
0 | 255 | ||
SMALLINT | 2 | -32768 | 32767 |
0 | 65535 | ||
MEDIUMINT | 3 | ||
INT | 4 | ||
BIGINT | 8 | ||
二、bit类型
BIT(M) 位类型,M指定位数,默认值1,范围1-64
system clear:清屏
bit类型数据,默认是按ASCII码值来显示的:
按十进制显示:
三、浮点类型
1、float
float (m,d) (unsigned):m指定显示长度,d指定小数位数 4字节
可以四舍五入,但四舍五入后的数据也不能超范围,否则无法插入:
2、decimal
decimal也是一种浮点数类型,float会存在精度的损失,而decimal可以规避这个问题。
decimal (m,d) (unsigned):m指定显示长度,d指定小数位数
float的精度大约为7位(小数部分),而decimal的整数最大位数m为65,小数最大位数d为30,默认m为10,d为0.(不同mysql版本会有些差异)
四、字符串类型
1、char
char[L]:固定长度字符串,可存储的长度为L(单位:字符),L最大为255.
注意:一个汉字虽然占2/3字节,但也是一个字符。
2、varchar
varchar[L]:变长字符串,L表示字符串长度,L最大为65535字节,其中有1-3字节是用来记录数据大小的,所以有效字节数为65532(utf-8:65532/3个字符,gbk:65532/2个字符)。
utf-8编码,1个字符3字节,最大只能存21845(实际还要-1到3字节)个字节。
char和varchar的区别?
1、char(L)是固定长度,意味着L多大就分多大空间,而varchar(L)的L只是决定了字符串长度的上限,实际是需要多大空间就分配多大空间。
如果长度都一样,推荐用char,长度有变化,推荐用varchar。
五、日期和时间类型
date:日期 yyyy-mm-dd,占3字节
datetime:时间日期,yyyy-mm-dd hh:ii:ss 表示范围从1000到9999,占8字节
timestamp:时间戳,从1970年到现在的yyyy-mm-dd hh:ii:ss(年月日时分秒),格式和datetime一样,占4字节。
在插入一行数据时时,timestamp这一列会自动插入当前时间戳:
更新某一列时,时间戳也会自动更新:
六、enum和set
enum:枚举、单选类型
enum('选项1','选项2','选项3',... );
提供若干个选项的值,最终一个单元格,只能存储其中一个值
set:集合,多选类型
set('选项值1','选项值2','选项值3',... );
提供若干个选项的值,最终一个单元格,可存储多个值
enum类型插入数据,可以看到,enum不能插入其他值,允许为空:
也可以插入选项值的下标,且下标从1开始:
set类型插入数据,不允许插入set中没有的选项值,可以同时插入多个,也允许为空:
NULL是空,表什么都没有,'':表示有东西,只不过是个空串。插入0就表示插入空串。
注意:在set这里,数字并不表示下标!!!
它是用bit位来表示有无这种选项值的,eg:
游泳 足球 乒乓球 羽毛球 代码
0 0 0 0 1 所以输入1,就表示输入代码
0 0 1 1 1 输入7,就表示输入代码、羽毛球、乒乓球