数据类型
数据类型学习摘要(只记录自己认为难理解的和易忘记的)
一、浮点数(FLOAT/DOUBLE)与定点数(DECIMAL)区别:
1.浮点数的存储空间是默认的,定点数的存储空间由其精度决定
2.当规定了数据的精度时(例如:FLOAT(6,2),DOUBLE(6,2),DECIMAL(6,2)),实际数据超出精度范围后,浮点数四舍五入,无警告,而定点数(DECIMAL(M,D);M代表数据总长度,称为精度,D代表小数点后的长度,称为标度)截断,且有相应警告;
3.当不规定数据精度时,浮点数有默认精度,而DECIMAL型默认整数位为10,小数位为0,即默认为整数,例如c的数据类型为DECIMAL,插入3.1434,显示为3,且有警告
4.在MySQL中,定点数以字符串形式存储,精度比浮点数要高,且浮点数会出现误差,所以选择定点数比较安全
二、日期及时间类型:
YEAR类型占一个字节,即8位,8位范围是0-255,而YEAR范围1901-2155,矛盾了不是?
原来YEAR的表示方法是1900+(0-255),所以才有了1901-2155
DATETIME占8个字节,范围:1000-01-01 00:00:00~9999-12-31 23:59:59
TIMESTAMP占4个字节,范围:19700101080001~20380119111407;零值:00000000000000
DATETIME零值:0000-00-00 00:00:00
TIMESTAMP的几种与DATETIME类型不同的形式:
1.使用CURRENT_TIMESTAM与P来输入当前日期时间
2.输入NULL时,系统会输入系统当前日期与时间
3.无任何输入时,系统会输入系统当前日期与时间
4.TIMESTAMP类型能够根据不同地区的时区来转换时间
三、CHAR与VACHAR:
1.CHAR的长度固定,而VARCHAR长度可变,例如:向CHAR(5)插入“1”,占用5个字节;而VARCHAR(5)中“1”占用2个字节(占用空间为字符串实际长度加 1)
2.CHAR类型自动删除空行,‘123 ’显示‘123’而VARCHAR保留空格,‘123 ’显示‘123 ’
3.CHAR与VARCHAR若插入值超限,系统阻止值的插入并报错
四、ENUM类型:('woman','man')
1.枚举类型,最多有65535个值,列表中每一个值都有一个顺序排列的编号,MySQL中存入的是这个编号,而不是列表中的值;
2.如果ENUM加上了NOT NULL 属性,其默认值为列表的第一个元素;若不加NOT NULL属性,ENUM类型允许插入NULL,且NULL为默认值
3.ENUM只能选取列表的一个值
五、SET类型:('woman','man')
1.枚举,与ENUM类型一致
2.可以取列表中一个元素或多个元素的组合,最多为64个元素构成的组合
3.插入记录时,SET字段中的元素顺序无关紧要,存入MySQL数据库后,数据库系统会自动按照定义时的顺序显示
4.所有的插入值必须是列表的元素,当插入值的一部分元素正确,一部分错误,系统会报错