zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

mysql 基本数据类型

mysql 基本 数据类型
2023-09-11 14:17:18 时间

整数类型

类型 字节数
tinyint 8
smallint 16
mediumint 24
int 32
bigint 64
  • mysql在整数计算时使用的是64位的进行计算的,当然除了一些聚合使用decimal和double。
  • mysql可以指定整数的宽度,并不会影响存储,只会规定了mysql的交互工具的显示字符的数量。

实数类型

类型 字节数
float 4
double 8
decimal -
  • float和double都是不精确存储的,而decimal是精确存储的,decimal(p, d) p表示精度,也就是数字的总个数,d表示小数精度,也就小数位有多少位,p的范围是 [1, 65],d的范围是[0, 30]。
  • decimal只是用来存储,不参加计算,在计算时会转成double进行计算。

字符串类型

  • varchar:用于存储变长的字符串。它比定长的char类型更加节省空间,除非表中使用 ROW_FORMAT=FIXED创建,表示每行都使用室长存储,这就会浪费空间。varchar如果列的最长长度小于255字节,则使用1个字节来存储长度,否则使用2个字节来存储长度。mysql5.0以后,如果varchar过长会被存储为blob类型。
  • char:用户存储定长的字符串。每个字符串占用的空间是固定长度的,在取数据时,每个字符串末尾的空格会被删除。在定长来说,他比varchar更节约空间,因为varchar需要额外的字节来存储长度。
  • binaryvarbinary是用来存储二进制字符串的。
  • blobtext:是为了存储很大数据的字符串,分别采用二进制和字符方式进行存储。当blob和text过大时,InnoDB会使用专门的外部区域来进行存储,此时行内存储的外部地址的指针。blob和text相比存储的是二进制数据,没有排序规则和字符集,其他的和text一样。mysql对blob和text进行排序进,并不是全文进行排序,而是只取前一小部分字符进行排序,可能通过max_sort_length进行配置,或者在排序时指定长度order by substring(column, 1, length)

枚举类型

  • mysql在存储枚举类型时会非常紧凑,并且在内部会把每个值在列表的位置保存成整数,并且在表.frm文件中保存“数字-字符串”的映射关系。使用枚举不但能够节省空间还能够在表关联时节省时间,缺点就是需要在创建表时将所有的枚举类型添加进行去,否则多一种枚举类型就需要修改表的字段alter table。创建枚举表的sql如下:
create table enum_table(
	e enum('B', 'A', 'C') not null
);
insert into enum_table values('B'), ('A');

日期和时间类型

  • mysql能存储的最小时间粒度为秒,当然也可以临时使用微秒进行计算。
  • datetime:能够保存大范围的值,从1001年到9999年,精度为秒,使用8个字节,它把时间封装到YYYYMMDDHHmmSS中去,与时区无关。
  • timestamp:它保存了从1970年1月1日午夜(格林尼治标准时间)以来的秒数,它和unix时间戳相同,它只使用4个字节,效率比datetime高,所以它的保存范围比较小,从1970年到2038年。mysql提供from_unixtimefrom_timestamp进行相互转化。

位数据类型

  • bit:位数据类型,最多能够支持64位,bit可以用来存储true/false的值,每一个值占一个bit,用几个bit占用几个bit,在myisam在处理bit列时会直接打包占用的位数,比如只使用了10位,那么就只用两个字节就可以存储。其他存储类型像InnoDB把它作为tinyint来处理。mysql把bit当作字符串而不是数字,所以当检索bit(1)时,拿到的是二进制的0或1字符串,而不是ascii码的0或1。然而在数字上下文中,它是把位字符串转化成了数字。所以使用时要尤其注意,尽量也不要使用了。如果只是想用来作true/false可以使用char(0)的方式,通过null值和空字符串来做真假值。
  • set:多个true/false可以使用set。