MYSQL数据类型

发布于:2024-10-17 ⋅ 阅读:(11) ⋅ 点赞:(0)

数值类型

整数

分为tinyint smallint int bigint,对应的大小为1 2 4 8byte。那么每个类型的数据范围也就确定了,和C语言中的char short int long 的范围相同。以tinyint为例:

1byte的数据范围是-128~127,创建表,插入数据

-129和128这两个数据超出范围,插入失败。

每种类型也可设置为无符号类型,如果不设置会默认有符号。只需要在类型后面加上unsigned

tinyint的无符号数据范围是0~255,插入-1和256会失败

浮点数 

浮点数有float,double和decimal三种。

float/double/decimal (n, m) [unsigned]//n表示浮点数的总位数,m表示小数的位数

 n-m就是整数位的长度,超过这个长度就会插入失败。

如果小数位长度超过m,就会四舍五入,不会直接插入失败。

如果添加了unsigned选项,浮点数的范围就是在有符号浮点数的范围的基础上直接将负数部分去掉。

float(4,2)的范围是-99.99~99.99 ,无符号的范围就是0~99.99

decimal的精度比float高,如果对数据精度要求高建议使用decimal。

bit位

bit (num) //num表示bit的位数,num的最大值为64

为什么bit的值不显示呢?因为bit的值是按照ASCII的值显示的,有些值显示不出来。

字符串类型

char

char (num) 

定长字符串,num是字符的个数,最大值是255,字符可以是字母也可以是汉字,注意不是字节,和C语言有区别。

varchar

varchar (num)

变长字符串,字符串最大65535字节,num表示存储的最大字符数,大小与编码密切相关。

varchar长度可以指定为0到65535之间的值,但是有1 - 3 个字节用于记录数据大小,所以说可用的字节数是65532。当我们的表的编码是utf8时,varchar(num)的参数num最大值是65532/3=21844[因为utf中,一个字符占 用3个字节],如果编码是gbk,varchar(num)的参数num最大是65532/2=32766(因为gbk中,一个字符 占用2字节)

varchar的长度还受其他变量的影响,如果varchar所在的表中有其他变量,varchar的长度还要减去其他变量的大小。例如,表中还有一个int变量,varchar的参数num最大是:(65535-3-4)/3 = 21842

char和varchar的比较

char会直接开辟出固定大小的空间,varchar会在不超过最大的范围的情况下,用多少空间开辟多少空间。

所以,char的效率比varchar高,因为不需要对字符串大小进行维护;但是varchar比char更节省磁盘空间。

如果数据定长,使用char更好;如果数据的大小会变化,使用varchar更好但是要保证最长的数据可以存下。

日期和时间

常见三种:date、datetime和timestamp

date :日期 'yyyy-mm-dd' ,占用三字节

datetime 时间日期格式 'yyyy-mm-dd HH:ii:ss' 表示范围从 1000 到 9999 ,占用八字节

timestamp :时间戳,从1970年开始的 yyyy-mm-dd HH:ii:ss 格式和 datetime 完全一致,占用四字节,时间戳会在添加数据或者更新数据时自动补充。

enum和set

enum是枚举,在多个值中选择一个;set是集合,在多个值中任选

enum ('选项一', '选项二'...)
set ('选项一', '选项二'...)

设置enum初值时可以使用字符内容也可以使用数字,按照设定的选项,从1开始,即1就代表选项一。

设置set初值时可以使用字符内容也可使用二进制位数字表示,例如要选择选项一和选项三,就填5(101)。选项越靠前二进制的位权就越低

查询

直接查询集合中有football的记录,发现找不到。因为只会返回hobby只有football的记录。

要想查询包含某个选项的记录,就要用find_in_set

find_in_set(sub,str_list) :如果 sub 在 str_list 中,则返回下标;如果不在,返回0; str_list 用逗号分隔的字符串。