二. MySQL支持的数据类型

本文详细介绍了MySQL中各种数据类型的特性,包括整数(TINYINT,SMALLINT等)、小数(FLOAT,DECIMAL)、BIT、日期时间、字符串(CHAR,VARCHAR,ENUM,SET)等,并讨论了它们的存储要求、精度控制和特殊功能,如AUTO_INCREMENT和二进制字符串处理。
摘要由CSDN通过智能技术生成

前言

每一个常量、变量和参数都由数据类型,它用来指定一定的存储格式、约束和有效范围。Mysql提供了多种数据类型,主要包括数值型、字符串类型、日期和时间类型。不同的MySQL版本支持的数据类型可能会稍有不同,用户可以通过查询相应版本的帮助文件来获取具体信息。此处以MySQL 5.0为例。

1. 数值类型

1.1 整数类型

整数类型字节最小值最大值
TINYINT1有符号-128 无符号0有符号127 无符号255
SMALLINT2有符号-32768 无符号0有符号32767 无符号255
MEDIUMINT3有符号-8388608 无符号0有符号 8388607 无符号65535
INT、INTEGER4有符号-2147483648 无符号0有符号22147483647 无符号4294967295
BIGINT8有符号-9223372036854775808 无符号0有符号9223372036854775807 无符号18446744073709551615

对于整数数据,MySQL还支持在类型名称后面的小括号内指定显示宽度,例如int(5)表示当数值宽度小于5位的时候,在数字前面填满宽度,如果不显示指定宽度则默认为int(11)。一般配合zerofill使用,顾名思义,zerofill就是用“0”填充的意思

整数类型还有一个属性:AUTO_INCREMENT。在需要产生唯一标识符或顺序值时,可利用此属性,这个属性只用于整数类型。
AUTO_INCREMENT值一般从1开始,每行增加1。在插入一个比该列中当前最大值 + 1 的值。一个表中最多只能有一个AUTO_INCREMENT列。对于任何想要使用AUTO_INCREMENT的列,应该定义为NOT NULL,并定义为PRIMARY KEY或定义为UNIQUE键
例如,可按下列任何一种方式定义AUTO_INCREMENT列:

CREATE TABLE AI(ID INT AUTO_INCREMENT NOT NULL PRIMARY KEY);

CREATE TABLE AI(ID INT AUTO_INCREMENT NOT NULL, PRIMARY KEY(ID));

CREATE TABLE AI(ID INT AUTO_INCREMENT NOT NULL, UNIQUE(ID));

1.2 小数类型

浮点数类型字节最小值最大值
FLOAT4±1.175494351E-38±3.402823466E+38
定点数类型字节描述
DEC(M,D)M + 2最大取值范围与DOUBLE相同,给定DECIMAL的有小区至范围由 M 和 D 决定
DECIMAL(M,D)M + 2最大取值范围与DOUBLE相同,给定DECIMAL的有小区至范围由 M 和 D 决定

对于小数的表示,MySQL分为两种方式:浮点数和定点数。浮点数包括float(单精度)和double(双精度),而定点数则只有decimal一种表示。
定点数在MySQL内部以字符串形式存放,比浮点数更精确,适合用来表示货币等精度高的数据
浮点数和定点数都可以用类型名称后加“(M,D)”的方式来进行表示,“(M,D)”表示该值一共显示M为数字(整数位+小数位),其中D位位于小数点后面,M和D又称为精度和标度。例如,定义为float(7,4)的一个列可以显示为-999.9999。MySQL保存值时进行四舍五入,因此如果在float(7,4)列内插入999.00009,近似结果是999.0001。值得注意的是,浮点数后面跟“(M,D)”的用法是非标准用法,如果要用于数据库的迁移,则最好不要这么使用。float和double在不指定精度时,默认会按照实际的精度(由实际的硬件和操作系统决定)来显示,而decimal在不指定精度时,默认的整数位为10,默认的小数位为0。
浮点数如果不写精度和标度,则会按照实际精度值显示,如果由精度和标度,则会自动将四舍五入后的结果插入,系统不会报错。
定点数如果不写精度和标度,则按照默认值decimal(10,0)来进行操作,并且如果数据超越了精度和标度值,系统则会报错

1.3 BIT类型

位类型字节最小值最大值
BIT(M)1~8BIT(1)BIT(64)

用于存放位字段值,BIT(M)可以用来存放多位二进制数,M范围从1~64,如果不写则默认为1位。对于位字段,直接使用SELECT命令将不会看到结果,可以用bin()(显示为二进制格式)或者hex()(显示为十六进制格式)函数进行读取。

1.4 日期时间类型

日期和时间类型字节最小值最大值零值表示
DATE41000-01-019999-12-310000-00-00 00:00:00
DATETIME81000-01-001 00:00:009999-12-31 23:59:590000-00-00
TIMESTAMP4197001010800012039年的某个时刻00000000000000
TIME3-838:59:59838:59:5900:00:00
YEAR1190121550000

2. 字符串类型

字符串类型字节描述及存储需求
CHAR(M)MM为0~255之间的整数
VARCHAR(M)M为0~65535之间的整数,值的长度+1个字节
TINYBLOB允许长度0~255字节,值的长度+1个字节
BLOB允许长度0~65535字节,值的长度+2个字节
MEDIUMBLOB允许长度0~167772150字节,值的长度+3个字节
LONGBLOB允许长度0~4294967295字节,值的长度+4个字节
TINYTEXT允许长度0~255字节,值的长度+2个字节
TEXT允许长度0~65535字节,值的长度+2个字节
MEDIUMTEXT允许长度0~167772150字节,值的长度+3个字节
LONGTEXT允许长度0~4294967295字节,值的长度+4个字节
VARBINARY(M)允许长度0~M个字节的变长字节字符串,值的长度+1个字节
BINARY(M)M允许长度0~M个字节的定长字节字符串

2.1 CAHR和VARCHAR类型

  • 相同点:用来保存MySQL中较短的字符串。
  • 不同点:
    • 存储方式不同
      CHAR存储方式:列的长度固定为创建表时声明的长度,长度可以为从0~255的任意值。
      VARCHAR存储方式:列中的值为可变长字符串,长度可以指定为0~255(MySQL 5.0.3版本以前)或者65535(MySQL5.0.3版本以后)之间的值。
    • 检索时不同
      在检索时,CHAR列删除了尾部的空格
      VARCHAR则保留了这些空格

2.2 BINARY和VARBINARY类型

  • 不同点:是否包含二进制字符串
    • BINARY:当存入值的长度小于定义的长度时,会使用0x00(零字节)来填充,以达到指定的字段定义长度。
    • VARBINARY:不会填充零字节。

2.3 ENUM类型

ENUM中文名称叫枚举类型,它的值范围需要在创建表时通过枚举方式显式指定,对1~255个成员的枚举需要1个字节存储;对于255~65535个成员,需要2个字节存储。最多允许有65535个成员。一次只能选取一个成员。类似于下拉菜单。

-- 命令格式
CREATE TABLE tableName(fieldName ENUM(value1,value2,……,valuen));

ENUM类型在数据库中的样子

2.4 SET类型

和ENUM类型非常类似,也是一个字符串对象,里面可以包含0~64个成员。根据成员的不同,存储上也有所不同。

  • 1~8成员的集合:占1个字节
  • 9~16成员的集合,占2个字节
  • 17~24成员的集合,占3个字节
  • 25~32成员的集合,占4个字节
  • 33~64成员的集合,占8个字节
    SET和ENUM除了存储之外,最主要的区别在于SET类型一次可以选取多个成员,而ENUM则只能选一个。
    SEt类型在数据库中的样子
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值