工具猿之MySQL教程-02-数据类型

MySQL数据类型

  数据类型是数据的一种属性,其可以决定数据的存储格式、有效范围和相应的限制。MySQL包括整数类型、浮点类型、定点数类型、日期和时间类型、字符串类型、二进制、ENUM类型和SET类型等数据类型。

一、整数类型

  整数类型是数据库中最基本的数据类型。

整数类型字节数无符号数的取值范围有符号数的取值范围
TINYINT10~255-128~127
SMALLINT20~65535-32768~32767
MEDIUMINT30~16777215-8388608~8388607
INT(INTEGER)40~4294967295-2147483648~2147483647
BIGINT80~18446744073709551615-9223372036854775808~9223372036854775807

二、浮点类型和定点类型

  MySQL中使用浮点类型和定点类型来表示小数。浮点类型包括单精度浮点数(FLOAT型)和双精度浮点数(DOUBLE型),定点数类型就是DECIMAL型。

类型字节数负数的取值范围非负数的取值范围
FLOAT(M,D)4-3.402823466E+38~-1.17549435E-380和1.17549435E-38~3.402823466E+38
DOUBLE (M,D)8-1.7976931348623157E+308~-2.2250738585072014E-3080和2.2250738585072014E-308~1.7976931348623157E+308
DECIMAL(M,D)或者DEC(M,D)M+2同DOUBLE型同DOUBLE型

  浮点数型在数据库中存放的是近似值,而定点数类型在数据库中存放的是精确值。

三、CHAR类型和VARCHAR类型

名称含义字符个数
CHAR(n)固定长度的字符串最多255个字符
VARCHAR(n)可变长度的字符串最多65535个字符

  CHAR和VARCHAR区别:
  a、都可以通过指定n来限制存储的最大字符数长度,CHAR(20)和VARCHAR(20)将最多只能存储20个字符,超过的字符会被截掉。n必须小于该类型允许的最大字符数。
  b、CHAR类型指定了n之后,如果存入的字符数小于n,后面将会以空格补齐,查询的时候再将末尾的空格去掉,所以CHAR类型存储的字符串末尾不能有空格,VARCHAR不受此限制。
  c、内部存储机制不同,CHAR是固定长度,CHAR(4)不管是存入1个字符,2个字符或者是4个字符(英文的),都将占用4个字节。VARCHAR是存入的实际字符数+1个字字节(n<=255)或2个字节(n>255),所以VARCHAR(4),存入1个字符将占用2个字节,2个字符占用3个字节,4个字符占用5个字节。
  d、CHAR类型的字符串检索速度要比VARCHAR类型的快。

四、TEXT类型和BLOB类型

  BLOB和TEXT是对应的,不过存储方式不同,TEXT是以文本方式存储的,而BLOB是以二进制方式存储的。如果存储英文的话,TEXT区分大小写,而BLOB不区分大小写。TEXT可以指定字符集,BLOB不用指定字符集。

名称字符个数
tinytext最多255个字符
text最多65535个字符
mediumtext最多224 - 1 个字符
longtext最多232 - 1 个字符

  二进制类型实在数据库中存储二进制数据的数据类型,如数码照片、视频和扫描的文档等数据。在MySQL中是用BLOB数据类型存储这些数据。BLOB有四种类型:TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB,其中最大长度对应4中TEXT数据类型。

名称字节长度
TINYBLOB最多255个字节
BLOB最多65535个字节(65KB)
MEDIUMBLOB最多224 - 1 个字节(16MB)
LONGBLOB最多232 - 1 个字节(4GB)

五、BINARY和VARBINARY

  BINARY和VARBINARY数据类型类似于CHAR和VARCHAR。不同之处在于BINARY与VARBINARY使用字节为存储单位,而CHAR与VARCHAR使用字符为存储单位。例如,BINARY(5)表示5字节的二进制数据,CHAR(5)表示存储5个字符的数据。
BINARY(n):固定n个字节二进制数据。n的取值范围为1~255,默认为1.若输出的字节长度小于n,则不足部分以0填充。BINARY(n)数据存储的长度为n+4个字节。
VARBINARY(n):可变长度,n的取值范围是1~65535,默认为1,数据存储长度为实际长度+4个字节。

六、时间和日期类型

   日期和时间类型是为了方便在数据库中存储日期和时间而设计的。

名称含义取值范围
YEAR年份,如‘2019’1901~2155
TIME时间,如‘12:34:36’
DATE日期,如‘2019-05-14’‘1000-01-01’~‘9999-12-31’
DATETIME日期时间,如‘2019-06-15 21:05:33’。日期时间用空格隔开年份在1000-9999,不支持时区
TIMESTAMP日期时间,如‘2019-06-17 21:06:35’年份在1970~2037,支持时区

  TIMESTAMP类型比较特殊,如果定义一个字段的类型为TIMESTAMP,这个字段的时间会在其他字段修改的时候自动刷新。所以这个数据类型字段可以存放这条记录最后被修改的时间,而不是真正的存放时间。

七、ENUM类型和SET类型

  这两种类型是比较特殊的字符串数据列类型,它们的取值范围是一个预先定义好的的列表。被枚举的值必须用引号包围,不能为表达式或者一个变量估值。如果想用数值作为枚举值,那也必须用引号引起。ENUM(枚举)类型,最多可以定义65535种不同的字符串,从中做出选择,只能并且必须选择其中一种,占用存储空间是一个或两个字节,由枚举值的数目决定。例如,要表示性别字段,可以用ENUM数据类型,ENUM(‘男’,‘女’)只有两种选择,要么是‘男’,要么是‘女’,而且只需要一个字节。
SET(集合)类型,其值同样来自于一个逗号分隔列表,最多可以由64个成员,可以选择其中的0个到不限定的多个,占用空间是1~8字节,由集合可能的成员数目决定。例如,某个表示业余爱好字段,要求提供多项选择,这时可以用SET数据类型,如SET(‘篮球’,‘足球’,‘乒乓球’,‘看书’,‘绘画’,‘跳舞’,‘音乐’,‘电影’),表示可以选择’篮球’,‘足球’,‘乒乓球’,‘看书’,‘绘画’,‘跳舞’,‘音乐’,'电影’中的0项或者多项。

八、如何选择数据类型

  SMALLINT:存储相对较小的整数,如年纪、数量、工龄和学分等。
  INT:存储中等整数,如距离。
  BIGINT:存储超大整数,如科学/科学数据。
  FLOAT:存储笑得数据,如成绩、温度和测量。
  DOUBLE:存储双精度的小数据,如科学数据。
  DECIMAL:以特别高的精度存储小数据,如货币数额、单价和科学数据。
  CHAR:存储通常包含预定义字符串的变量,如国家、邮编和身份证号。
  VARCHAR:存储不同长度的字符串值,如名字、商品名称和密码。
  TEXT:存储大型文本数据,如新闻事件、产品描述和备注信息。
  BLOB:存储二进制数据,如图片、声音、附件和二进制文档。
  DATE:存储日期,如生日和进货日期。
  TIME:存储时间或时间间隔,如开始/结束时间、两时间之间的间隔。
  DATETIME:存储包含日期和时间的数据,如事件提醒。
  TIMESTAMP:存储即时时间,如当前时间、事件提醒器。
  YEAR:存储年份,如毕业年、工作年和出生年。
  ENUM:存储字符属性,只能选择其中之一,如性别、布尔值。
  SET:次年初字符属性,可从中选择多个字符的联合,如多项选择、业余爱好和兴趣。

九、数据类型的附加属性

  在建表的时候,除了要根据字段存储的数据不同选择合适的数据类型外,还可以附加相关的属性。例如,在创建学生表时,学号字段要求不能为空值,是主键并且唯一的,这个时候可以对该字段添加 NOT NULL PRIMARY KEY属性。如创建商品销售表时,假如有一个字段为‘销售编号’,要求每销售一笔自动编一个递增的编号,这时可以指定该字段类型TINYINT ,属性为AUTO_INCREMENT。

MySQL关键字含义
NULL/NOT NULL数据列包含(不包含)NULL值
DEFAULT xxx默认值,如果插入记录的时候没有指定值,将去这个默认值
PRIMARY KEY指定列为主键
AUTO_INCREMENT递增,如果插入记录的时候没有指定值,则在上一条记录的值加1.仅适用于整数类型
UNSIGNED无符号,属性只针对于整型
CHARACTER SET name指定一个字符集
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值