MariaDB数据类型


只要接触数据,就一定要清楚数据的类型。数据类型决定了数据的存储格式、有效范围和相应限制。
MariaDB的数据类型包括:

  • 整数、浮点数和定点数类型
  • 日期和时间类型
  • 字符串类型
  • 二进制类型

整数

整数是数据库最基础的数据类型,MariaDB支持的整数类型有:

整数类型字节数有符号的取值范围无符号的取值范围
TINYINT1-128~1270~255
SMALLINT2-32768~327670~65535
MEDIUMINT3-8388608~83886070~16777215
INT4-2147483648~21474836470~4294967295
INTEGER4-2147483648~21474836470~4294967295
BIGINT8-9223372036854775808~92233720368547758070~18446744073709551615

其实在MariaDB中,INT和INTEGER类型是一样的。
不同整数类型的字节数不同,其取值范围也不同,其实根据字节数可以算出取值范围。比如TINYINT占用一个字节,一个字节是八位,那么它的无符号数的最大值就是28-1,也就是255,有符号数的最大值就是27-1,就是127。同理可以计算其他类型的取值范围。
MariaDB支持查看数据类型的显示宽度,显示宽度就是能够显示的最大数据的长度。
首先我们创建一个用以测试的表:

create table test_int (
    -> a tinyint,
    -> b smallint,
    -> c mediumint,
    -> d int,
    -> e bigint
    -> );

接着我们查看数据的默认显示宽度

+-------+--------------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| a     | tinyint(4)   | YES  |     | NULL    |       |
| b     | smallint(6)  | YES  |     | NULL    |       |
| c     | mediumint(9) | YES  |     | NULL    |       |
| d     | int(11)      | YES  |     | NULL    |       |
| e     | bigint(20)   | YES  |     | NULL    |       |
+-------+--------------+------+-----+---------+-------+

这个默认的显示宽度其实就是各类型有符号数的最大值的长度加1,因为符号要占一个位置。
整数类型可以搭配zerofill参数,这个参数可以将没有数字的显示空间用0填满。需要注意的是,使用zerofill后会自动加上unsigned属性,并且显示宽度会比默认宽度小1。
我们可以设置显示宽度,设置的显示宽度不能超过默认宽度,此时如果我插入一条超过设置显示宽度却小于默认宽度的数据时,依然能正常显示该条数据;但如果插入一条大于默认宽度的数据就无法插入。

浮点数和定点数

浮点数包括单精度浮点数(FLOAT型)和双精度浮点数(DOUBLE型),定点数就是DECIMAL型。

+-------+---------------+------+-----+---------+-------+
| Field | Type          | Null | Key | Default | Extra |
+-------+---------------+------+-----+---------+-------+
| a     | float         | YES  |     | NULL    |       |
| b     | double        | YES  |     | NULL    |       |
| c     | decimal(10,0) | YES  |     | NULL    |       |
+-------+---------------+------+-----+---------+-------+
类型字节数
FLOAT型4
DOUBLE型8
DECIMAL(M,D)M+2

浮点数和定点数都要设置参数。M参数称为精度,是数据的总长度,即有效数字;D参数称为标度,是小数点后的长度。
在MariaDB中,定点数以字符串形式存储,其精度比浮点数要高。
如果插入值的精度高于定义的精度,会自动进行四舍五入使精度满足要求,但是float和double在插入时没有提示,decimal会有警告信息发出。
如果不指定精度,float和double一般会默认保留实际精度,decimal默认整数位为10,小数位为0,即保留整数。

日期与时间

日期和时间类型方便了在数据库中存储日期和时间,mariadb中有这些日期和时间类型:

数据类型字节数取值范围0值
year11901~21550000
date41000-01-01~9999-12-310000-00-00
time3-838:59:59~838:59:5900:00:00
datetime81000-01-01 00:00:00~9999-12-31 23:59:590000-00-00 00:00:00
timestamp419700101080001~2038011911140700000000000000
+-------+-----------+------+-----+---------------------+-------------------------------+
| Field | Type      | Null | Key | Default             | Extra                         |
+-------+-----------+------+-----+---------------------+-------------------------------+
| a     | year(4)   | YES  |     | NULL                |                               |
| b     | date      | YES  |     | NULL                |                               |
| c     | time      | YES  |     | NULL                |                               |
| d     | datetime  | YES  |     | NULL                |                               |
| e     | timestamp | NO   |     | current_timestamp() | on update current_timestamp() |
+-------+-----------+------+-----+---------------------+-------------------------------+

字符串类型

字符串类型是MariaDB中存储字符串的数据类型,包括char,varchar,blob,text,enum和set。

char和varchar类型

char和varchar类型都是在创建表时指定了最大长度,它们的不同在于

  • char类型的长度是固定的,就是指定的长度,可以取0~255的任意值
  • varchar类型的长度是可变的,指定的是其最大长度,可以取0~65535的任意值

text类型

text类型是一种特殊的字符串类型,它只能保存字符数据,但是一般我们不会使用text类型,而且应该尽量避免使用text类型。

enum类型

enum类型就是枚举类型,在创建表时就应将enum的取值范围以列表的形式给出。
如果enum类型加上了not null属性,那么enum默认值就是取值列表中的第一个值;如果没有not null属性,那么默认值就是null。

set类型

set类型与enum类型类似,在创建表的时候要给与取值范围的列表,不同的是,enum类型只能选取一个值,而set能选取多个值。
set和enum对取值在一定范围的离散值很有效,enum类型只能在列表中取一个值,set类型可以在列表中取多个值,需要注意的是这两个数据类型都不是直接将数据存入数据库,而是将其列表中的编号存入数据库。

二进制类型

二进制类型实在数据库中存储二进制数据的数据类型,包括binary,varbinary,bit,tinyblob,blob,mediumblob和longblob。

类型取值范围
binary()字节长度需要定义,允许长度在定义范围内的定长二进制字符串插入
varbinary()插入变长二进制字符串,字节数为值的长度加1
bit()二进制数字,最大64位
tinyblob可变长二进制数据,最多255个字节
blob可变长二进制数据,最多(216-1)个字节
mediumblob可变长二进制数据,最多(224-1)个字节
longblob可变长二进制数据,最多(232-1)个字节

binary和varbinary类型

它们的区别与char和varchar的区别类似

bit类型

bit类型也是在创建表时指定了最大长度,插入的数字会被转换为二进制并存储起来,并且查看时可以通过声明查看二进制来查看数据的二进制形式。

blob类型

blob类型是一种特殊的二进制类型,可以用来保存数据量很大的二进制数据。
blob类型与text类型很类似,其区别在于:

  • blob类型用于储存二进制数据,数据会根据其二进制编码比较和排序
  • text类型是以文本模式进行比较和排序的

blob类型主要用于存储图片、PDF文档等二进制文件,但是不推荐用这种方法存储文件。更加合理的方法是将大文件存储在文件系统中,数据库内只储存路径

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值