数值类型
tinyint类型
java
tinyint:默认有符号整数,范围为-128~127
tingint unsigned:无符号整数,0~255;
注意:如果我们向MySQL中插入的值超过数据类型的定义时,插入不成功。反之如果插入成功了则数据一定是合法的。所以,mysql中,数据类型一般而言也是一种约束。这保证了数据库中的数据是可预期(数据在一定范围内),完整的(没有发生截断)。
bit类型
java
bit[(M)] : 位字段类型。M表示每个值的位数,范围从1到64。如果M被忽略,默认为1
注意:插入的值不能超出二进制M位所能表示出来的十进制数大小
java
若插入的值位bit类型,简单使用select * from 表名,是不能查出bit类型那一列的元素的,需要改成这样:
以十六进制输出:select hex(属性列类型为bit的列名) from 表名;
#HEX:以十六进制输出
以十进制输出:select 属性列类型位bit的列名+0 from 表名;
注意:插入字母是按照对应的ascll码表上的数值插入的。
小数类型
float类型
java
float[(m, d)] [unsigned] : M指定显示长度,d指定小数位数,占用空间4个字节
注意: MySQL在保存值时会进行四舍五入

如上图所示,当我们插入大的值时,缺缺失一些位上的值。

如上图:出现了四舍五入,我的MySQL中float的精度为6位数,从前往后算,后面多余的位数就进行四舍五入。
decimal类型
java
decimal(m, d) [unsigned] : 定点数m指定长度,d表示小数点的位数
decimal整数最大位数m为65。支持小数最大位数d是30。如果d被省略,默认为0.如果m被省略, 默认是10
注意: decimal和float很像,但是有区别: float和decimal表示的精度不一样 , 如果希望小数的精度高,推荐使用decimal。
char类型
java
char(L): 固定长度字符串,L是可以存储的长度,单位为字符,最大长度值可以为255
注意: char(2) 表示可以存放两个字符,可以是字母或汉字,但是不能超过2个, 最多只能是255
char:长度固定,varchar:有上限,但是是用多少给你多少
varchar类型
java
varchar(L): 可变长度字符串,L表示字符长度,最大长度65535个字节
注意:一个中文字符占3个字节
小结:
varchar 总字节上限为 65535,其中会占用 1~3 字节存储数据长度,实际可用数据字节为 65532。编码决定单字符占用字节,进而限制 varchar (n) 最大 n:
utf8:1 字符占 3 字节,最大 n = 65532 ÷ 3 = 21844
gbk:1 字符占 2 字节,最大 n = 65532 ÷ 2 = 32766
定长 char:直接开辟对应固定长度存储空间,预先分配固定空间,磁盘空间浪费,但查询效率更高
变长 varchar:不超过设定上限前提下,实际占用多少就开辟多少空间,用多少占多少,节省磁盘空间,但查询效率更低
enum和set
java
enum:枚举,"单选"类型;
set:集合,"多选"类型;
集合类型:;在插入值时,可以是对应值,也可以是数值,这个数字最终转为二进制形式,从第一位开始对应于我所列举的集合中元素,若对应位为1,则插入该数;查询时同理。数字0代表着空串,占着位置。
集合查询使用find_ in_ set函数:
使用find_in_set函数一次只能查一个元素在一个集合中,若要查多个,可使用sql语言中的and做链接。
java
find_in_set(sub,str_list) :如果sub 在str_list 中,则返回下标;
如果不在,返回0;str_list 用逗号分隔的字符串。