一、整数类型
1. 对比
类型 大小 有符号范围 无符号范围(unsigned)
tinyint 1字节 -128 〜 127 0 〜 255
smallint 2字节 -32768 〜 32767 0 〜 65535
mediumint 3字节 -8388,608 〜 8388607 0 〜 16777215
int 4字节 ±2147483648(7) 0 〜 4294967295
bigint 8字节 ±9223372036854775808(7) 0 〜 18446744073709551615
2. 注意事项
- 整型默认为有符号,通过 unsigned 来设置无符号
- 如果插入的值超过整型的范围,那么插入的值为临界值
- int(n),整形的数据类型长度n不是数据最大存储,仅代表的是显示位宽,没什么用,一般和zerofill一起使用,达到和超过n位数无效果,未达到n位数用0补位,只在特定客户端下才可看到补位效果
二、小数类型
1. 对比
类型 大小 有符号范围 无符号范围(unsigned)
-- 浮点型(近似值)
float(M,D) 4字节 -3.402823466E+38~-1.175494351E-38 0 和 -1.175494351E-38~-3.402823466E+38
double(M,D) 8字节 -1.7976931348623157E+308~-2.2250738585072014E-308 0 和 -2.2250738585072014E-308~-1.7976931348623157E+308
-- 定点型(精确值)(存储方式:字符串)
DECIMAL(M,D) M+2字节 和double差不多
2. 注意事项
- 精度M和标度D
M表示总共的位数(整数+小数),D表示保留小数位数,M必须大于D,M范围1~255,D范围1~30
- 最大整数位是M-D位,如果插入的小数的整数位大于M-D那么结果是临界值,小数超出保留小数位数则四舍五入比如:类型为 float(4,2) 的字段,插入小数的整数部分最大是99,当插入的值是100时,结果为99.99
- FLOAT 和 DOUBLE 不设置M、D时,默认按照存储的值来决定精度,DECIMAL 不指定精度时,默认为(10,0)
- FLOAT M>6时,在第6位四舍五入,DOUBLE M>17时在第17位四舍五入,如果是整数位数大于M将四舍五入后用0补位,如果整数位小于M,则在小数位截断
- 浮点型和定点型区别
相同的存储大小,浮点型能表示更大精度的小数(因为:定点型的大小是M+2,float 4字节、double 8字节)
定点型是以字符串的方式进行存储,相对浮点型,精度更高(货币运算时建议使用定点型,浮点数运算时也容易出问题)
三、字符串类型
1. 对比
类型 允许最大字符 范围 优缺点
char(M) M 0 ~ 255 字符 固定长度字符串,损耗空间,查询效率高
varchar(M) M 0 ~ 65535 字符 可变长度字符串,节省空间,查询效率低
tinytext 0 ~ 255 字节 不设置长度,不删除尾部空格,查询效率最低
text 0 ~ 65535 字节 不设置长度,不删除尾部空格,查询效率最低
mediumtext 0 ~ 16777215 字节 不设置长度,不删除尾部空格,查询效率最低
longtext 0 ~ 4294967295 字节 不设置长度,不删除尾部空格,查询效率最低
enum 枚举 0 ~ 65535 成员(小于255成员占1个字节,大于占2个字节) 只能插入一个枚举的值,或者枚举的索引
set 集合 0 ~ 64 成员(每8个成员占1个字节) 只能插入1个或多个集合的值,在一个引号中通过逗号分割
2. 注意事项
- varchar(4) 和 char(4) 的区别是,当只存入 2 个字节的数据时,varchar(4)实际占用 2+1=3 个字节,char(4) 占用 4 个字节
- text 类型,范围单位是字节,不是字符,在utf8编码下,1个中文字符占用3个字节
即:字节数/3=可存储的中文字符数,text常用于存储文章、评论等,由于查询效率低,作为字段查询时能用varchar类型不用text类型
- 创建表时给字段添加 enum 枚举类型 字段名 enum( '值1', '值2','值3' ... ),插入数据时只能插入枚举的值,或者枚举的索引
插入'值1' 或者 1 或者 '1' 表示插入'值1',如果插入其他值或者不存在的索引,也会插入成功,但是插入的是空值
- 创建表时给字段添加 set 集合类型 字段名 set( '值1', '值2','值3' ... ),插入数据时只能插入集合的值
可插入多个集合值 '值1,值2',如果插入其他值,也会插入成功,但是插入的是空值
四、时间类型
1. 对比
类型 大小 范围
year 1字节 1901 ~ 2155
time 3字节 -838:59:59 ~ 838:59:59
date 3字节 1000-01-01 ~ 9999-12-31
datetime 8字节 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59
timestamp 4字节 1970-01-01 00:00:01 UTC ~ 2038-01-19 03:14:07 UTC
2. 注意事项
- datetime 和 timestamp 都可以存储 YYYY-MM-DD HH:MM:SS 类型的时间
区别在于 datetime 不受当前时区影响,插入的时间是多少就存多少,timestamp 存储的时间受当前时区time_zone影响
-- 查看当前时区 (默认系统时区)
SHOW VARIABLES LIKE 'time_zone'
-- 修改当前时区(更改为东八区)
SET time_zone ='+8:00';
网友评论