5:数据类型
1. 数据类型:
2. 数值类型:
-
每个类型都可以设置unsigned属性,设置后范围会发生改变。
-
尝试向上述类型插入一个不符合范围的值,会插入失败,所以说可以被插入到数据库的值一定是合法的值,所以说数据库中的值一定是可预期、完整的,可以认为数据的类型也是一种约束。
3. 浮点类型存储:
-
浮点类型有float、double、decimal三种。
-
如果对浮点类型加上unsigned做限制,正数范围不变,负数范围直接被砍掉,使得只能存储非负数。
-
存储超过范围的值,会被阻止。在限制小数部分精度的情况下,会发生四舍五入。
-
float和double不适合存储精确值,当精度过大,会出现明显误差,使用decimal存储高精度的浮点数。
-
float和double占用的空间是明确的,但是decimal占用的空间是根据精度决定的,这是由于decimal的存储是按照字符串进行存储的。
4. 字符串类型:
-
char(size):size代表字符数量,不是字节,比如char(2)可以插入'ab'也可以插入'中国',可设置的size的最大值为255。
-
varchar(L):变长字符串,最大可以存储65535个字节,注意是字节不是字符;L代表的是空间上限可以字符数,如果实际使用小于上限,实际开辟出的空间会缩小到实际占用空间,而char会固定开辟指定空间。varchar实际可以存放的字符数量和编码有关联,看对应编码一个字符占几个字节空间。同时会耗费1到3个字节用于记录当前数据实际大小。
-
如果确定长度,比如手机号、身份证号,就使用char;如果不确定长度,比如姓名、地址,就使用varchar。
5. 日期类型:
-
timestamp类型会自动更新,如果一个表包含该字段,操作表中的某条数据,该条数据的timestamp字段的值会自动更新为当前时间戳。与之相对的datatime就是一个不会改变的固定时间。
6. 枚举类型和集合类型:
-
enum('选项1','选项2',...):提供若干选项,只能选其一,实际存储的是数字,选项从前到后依次对应数字1到65535。
-
set('选项1','选项2',...):提供若干选项,可多选,最多64个。
-
向集合字段插入数据,使用单引号包裹,逗号分隔多个值。
-
enum和set都可以为null,表示可以不插入值;但是enum要插入值必须选择其一,set可以插入空值。
-
set也可以使用值进行插入,但是和enum的区别是,enum是下标,set是位图。