MySQL中的数据类型
在Mysql中有许多衍生的int类型,比如Tinyint就是其中一个,他的最小值是-128 最大值是127那么为什么Mysql中要对这些数据做如此详细的处理?是为了让程序员对数据的合法插入,数据类型本身也是一种约束。可以看到,一旦插入数据超过范围,就会报错。在MySQL中类型分为无符号和有符号,默认是有符号;可以通过unsigened来某个字段是无符号的;例子:可以看到,该类型就不可插入带符号数字
1,Tinyint
在Mysql中有许多衍生的int类型,比如Tinyint就是其中一个,他的最小值是-128 最大值是127
那么为什么Mysql中要对这些数据做如此详细的处理?是为了让程序员对数据的合法插入,数据类型本身也是一种约束。
可以看到,一旦插入数据超过范围,就会报错。
说明:
在MySQL中类型分为无符号和有符号,默认是有符号;
可以通过unsigened来某个字段是无符号的;
例子:
可以看到,该类型就不可插入带符号数字。
int类型衍生中还有:smallint 最小值是-32768,最大值是32767;
mediumint,最小值是-8388608,最大值是8388607;
还有int,bigint。
2,bit类型/字节类型(位类型)
name bit(1); 只能插入0和1,只在二进制位上开了一位,所以取值范围是0和1;
3,浮点类型
1,float
用法:float(m,d);其中m表示显示长度,d表示精度,占用空间四个字节
如果用unsigend定义,那么float的取值范围就是0-99.99,double用法也是一样的就不多说了。
2,decimal
decimal(m, d) [unsigned] : 定点数m指定长度,d表示小数点的位数
decimal(5,2) 表示的范围是 -999.99 ~ 999.99
decimal(5,2) unsigned 表示的范围 0 ~ 999.99
decimal和float很像,但是有区别: float和decimal表示的精度不一样
可以看到,decimal的精度比float的进度要高,当插入精度大的数字时可以选用decimal。
4,字符串类型
1,char
固定长度字符串
用法:char(L);L表示字符串的长度,该类型字符串的最大长度位255:
该字符为固定长度,就是在表中定义了多少空间他就给你开多少固定的空间;
从图中可以看到,2并不是开了两个字节的长度,而是可以存两个字符,可以是汉字或英文。
2,varchar
用法:varchar(L): 可变长度字符串,L表示字符长度,最大长度65535个字节(注意是字节)
用法和char类似:
其中,与char不一样的是,如果给varchar开了长20的长度,但是只给里面塞一个字符,这个时候varchar的长度是1,而不是20.这就是变长字符的优势;其中,大小为65535跟字节,但是要用三个字节来存字符的长度等内容,实际长度是65532,而最长的字符数是21844字符:
5,日期和时间类型
date :日期 'yyyy-mm-dd' ,占用三字节
datetime 时间日期格式 'yyyy-mm-dd HH:ii:ss' 表示范围从 1000 到 9999 ,占用八字节
timestamp :时间戳,从1970年开始的 yyyy-mm-dd HH:ii:ss 格式和 datetime 完全一致,占用 四字节
可以看到timestamp它显示的是时事的时间,每次跟新表的时候t3会跟着变
6,enum 和 set类型
语法: enum:枚举,“单选”类型;
enum('选项1','选项2','选项3',...);
set:集合,“多选”类型;
set('选项值1','选项值2','选项值3', ...);
以下是调用方法之一:
当然enum可以使用下标来指代(注意不能使用零下标):
set可以指定多个内容进行写入,具体操作如下:
enum和set只能插入在建表之前定好的量,定义其他会报错。
set还可以使用数字标下标,但是set是以位来当下标,要注意:
可以看到,set并不以数字为下标:
1-->00001;
2-->00010;
7-->00111;
31-->11111;
案例:
set也可插入零号位,但是插入时就不是null而是‘’,代表插入过的意思。
7,enum 和 set类型查找
操作:
enum:
set:
可以看到,set用where查找时,时按严格匹配来查找,那些含有羽毛球的多个集合里不会被查找出来。
我们可以用关键字 find_in_set 可以看元素集合
方法:
可以用and的方式组合多个查询条件:
希望可以对你们有帮助.
更多推荐
所有评论(0)