1.整数类型
TINYINT:非常小的整数,存储空间为1字节,
取值范围:有符号:-128---127,无符号:0---255
SMALLINT:小整数,存储空间为2字节
取值范围:有符号:-32768---32767,无符号:0---65535
MEDIUMINT:中型大小的整数,存储空间为3字节
取值范围:有符号:-2^23---2^23-1,无符号:0---2^24-1
INT:一般大小的整数,存储空间为4个字节
取值范围:以此类推
BIGINT:很大的整数,存储空间为8字节
取值范围:以此类推
设置时,id INT(6),6指的是显示宽度,是指定最大显示的数字个数,如果在数据表中插入了大于显示宽度,但是并没有超过整数类型数值范围的数据,依然可以正确的插入。
id INT(6) ZEROFILL :如果插入的数值不到6位则可用0填充
2.浮点数类型
FLOAT:单精度浮点数,4个字节
DOUBLE:双精度浮点数,8个字节
MySQL会四舍五入
price FLOAT(M,D)——(M,D)表示当前数值包含整数位和小数位一共会显示M位数字。其中小数点后会显示D位数字,M称为精度,D称为标度。
3.定点数类型
DECIMAL:该类型设置时可以使用(M,D),M被称为精度,是数据的总位数,D被称为标度,表示数据的小数部分所占的位数,所占用的存储空间为M+2个字节,用于存储精确小数,其精度和范围都比浮点数大,((int)x^2+(int)y^2)返回值的类型就为定点数。
Joe 需要使用下列表做一项数值计算 点击进入MySQL实战练习环境。 show databases; 列出所有数据库 计算查询为: select id, (x^2 + y^2)/2 as result from points; 得到的结果集中,result 列的类型应该是:decimal 解析:其实在数值计算中,我们需要考虑到数值的精度和溢出问题,不同的数据类型有不同的精度和取值范围,因此需要根据实际情况选择合适的数据类型。在这个习题中,我们需要计算平方和的一半,结果可能会出现小数,因此选择了decimal数据类型来保证精度。而对于(X)*y/(X)+-Y,因为乘法和除法的优先级高于加法和减法,所以会先计算(X)*y/(X),这个结果就是y,然后再加上或减去Y,最终结果是2Y或0,所以可以选择int数据类型来存储。 |
4.日期与时间类型
YEAR:通常用来表示年,格式YYYY或YY,最小值1901,最大值为2155;
YY最小值为00,最大值为99,01-69时表示2001到2069;70-99时表示1970到1999,不推荐使用
DATE:通常用来表示年,月,日,格式YYYY-MM-DD
使用CURRENT_DATE()或者NOW()函数,会插入当前系统的日期
INSERT INTO goods VALUES(CURRENT_DATE()),(NOW()); |
TIME:通常用来表示时,分,秒,格式HH:MM:SS
使用CURRENT_TIME()或者NOW()会插入当前时间
DATETIME:通常用来表示年,月,日,时,分,秒,格式YYYY-MM-DD HH:MM:SS
使用CURRENT_TIME()或者NOW()会插入系统时间
TIMESTAMP:通常用来表示带时区的年,月,日,时,分,秒,格式YYYY-MM-DD HH:MM:SS UTC(时区,UTC只是一种)
存储数据的时候需要对当前时间所在的时区进行转换,查询数据的时候再将时间转换回当前的时区。因此,使用TIMESTAMP存储的同一个时间值,在不同的时区查询时会显示不同的时间。缺点是表示的日期时间范围比较小,并且只有插入时反映当地的时区,其他时区的人查看会有误差。
更改时区:SET time_zone='时区'
5.文本和字符串类型
字符串类型可以存储文本字符串数据,也可以存储一些图片,音频和视频数据,也就是二进制数据。
CHAR:CHAR(M)值的长度为M,占用M个字节,最大长度是255个字符
字段长度固定,不保留数据尾部的空格,不适合尾部有空格的字符串
VERCHAR:VERCHAR(M)值的长度为M,占用M+1个字节,最大长度是65535个字符
字段长度可变,保留数据尾部的空格
上述两个可以设置默认值
TINYTEXT:值的长度为L,占用L+2个字节
TEXT:L+2个字节,最大长度是4294967295个字节
MEDIUMTEXT:L+3个字节
LONGTEXT:L+4个字节
上述所有TEXT都可保留尾部空格,但是不能指定长度,
ENUM:1或2个字节,枚举类型,
例如
CREATE TABLE goods( e ENUM ('A','B','C') ); 表明e列的取值只能为A,B,C |
SET:1,2,3,4或8个字节,表示一个字符串对象,可以包含0个或多个成员,但成员个数的上限为64
CREATE TABLE goods( e SET ('A','B','C')); |
与ENUM不同的是,e列的取值可以'A'也可以是'A,B',但是不可以重复,如插入'A,B,A',则表中结果为'A,B'
JSON:JSON是字典类型,
CREATE TABLE goods( e JSON); |
INSERT INTO goods (e) VALUES ('{"name":"mary","age":"18"}'); |
6.二进制字符串类型
BIT:可设置长度,每个值最小位数为1,最大位数为64
直接用SELECT * FROM goods;命令无法直接查看二进制数据,使用SELECT BIN(b+0) FROM goods;【b是字段名】,显示二进制结果;若使用SELECT b+0 FROM goods;命令查询则输出十进制结果;
BINARY:可设置长度,定长,若输入值未达到指定长度则会在数据后面填充“\0”字符
VERBINARY:可设置长度,可变长度
TINYBLOB
BLOB
MEDIUMBLOB
LONGBLOB
BLOB四种类型可以存储一个二进制的大对象,比如图片,音频和视频等,但是一般不直接存储在MySQL中,一般存储在服务器的磁盘上,然后在MySQL中存储访问路径。