跳至主要內容

MySQL数据类型

大约 4 分钟约 1264 字

本节介绍MySQL中的数据类型。

数字类型

MySQL支持所有的ANSI/ISO 92 数字类型,包括准确数字的数字类型以及近似数字的数字类型。

数据类型主要可以分为整型和浮点型两种数据类型,如下:

  1. 整型
数据类型取值范围说明单位
TINYINT符号值:-128~127,无符号值:0~255最小的整数1字节
BIT符号值:-128~127,无符号值:0~255最小的整数1字节
BOOL符号值:-128~127,无符号值:0~255最小的整数1字节
SMALLINT符号值:-32768~32767,无符号值:0~65535小型整数2字节
MEDIUMINT符号值:-8388608~8388607,无符号值:0~16777215中型整数3字节
INT符号值:-2147683648~2147683647,无符号值:0~4294967295标准整数4字节
BIGINT符号值:-9223372036854775808~9223372036854775807,
无符号值:0~18446744073709551615
大型整数8字节
  1. 浮点型
数据类型取值范围说明单位
FLOAT+(-)3.402823466E+38单精度浮点数8或4字节
DOUBLE+(-)1.7976931348623157E+308、
+(-)2.2250738585072014E-308
双精度浮点数8字节
DECIMAL可变一般整数自定义长度

其中DECIMAL是精度确定的小数,比如想要指定总位数为8、小数位数为2的数就可以使用DECICAL(8,2),其中8就表示总共有8位数,2表示其中有2位小数。

FLOAT和DOUBLE存在误差问题,尽量避免浮点数比较,若要使用货币等高精度的数字则应该使用DECIMAL数据类型。

字符串类型

字符串类型可以分为3类:普通的文本类型(CHAR和VARCHAR)、可变类型(BLOB和TEXT)、和特殊类型(SET和ENUM)。

  1. 普通文本类型:即CHAR和VARCHAR类型,CHAR列的长度被固定为创建表声明的长度,取值在1-255;VARCHAR列的值是变长的字符串,取值和CHAR一样。
类型取值范围说明
[national] CHAR(M) [binary|ASCII|unicode]0-255个字符固定长度为M的字符串,其中M的取值为0-255,national关键字指
定了应该使用的默认字符集。binary关键字指定了数据是否区分大小
写(默认是区分大小写的)。ASCII关键字指定了在该列中使用latin1字符集。unicode关键字指定了是否使用UCS字符集。
CHAR0-255个字符与CHAR(M)类似
[national] VARCHAR(M) [binary]0-255个字符长度可变,其他和CHAR(M)类似

存储字符串长度相同的全部使用CHAR类型;字符长度不相同的使用VARCHAR类型,不预先分配存储空间,长度不要超过255。

  1. 可变类型:大小可以改变,TEXT类型适合存储长文本,BLOB适合存储二进制数据,支持任何数据,如声音、文本和图像等。
类型最大长度(字节数)说明
TINYBLOB28-1(255)小BLOB字段
TINYTEXT28-1(255)小TEXT字段
BLOB216-1(255)常规BLOB字段
TEXT216-1(255)常规TEXT字段
MEDIUMBLOB224-1(255)中型BLOB字段
MEDIUMTEXT224-1(255)中型TEXT字段
LONGBLOB232-1(255)长BLOB字段
LONGTEXT232-1(255)长TEXT字段
  1. 特殊类型:ENUM和SET类型。
类型最大值说明
ENUM(“value1”,”value2”,...)65535该类型的列只可以容纳值之一或者NULL
SET(“value1”,”value2”,...)64该类型的列可以容纳一组值或为NULL

误区警示:BLOB、TEXT、ENUM和SET字段类型在MySQL中的检索速度不高,很难使用索引进行优化。如果必须使用这些类型,一般采用特殊的结构设计,或者与程序相结合使用其他的字段类型替代。例如,SET类型可以使用整型(0、1、2、3、…)注释功能和程序的检查功能集合替代。

若速度优先、要选择固定的列,则选择CHAR类型;若节省空间、使用动态的列,则使用VARCHAR类型;要将列的内容限制在一种选择则选择ENUM类型;允许一个列有多于一个的条目则选择SET,若字符串不区分大小写则选择TEXT类型,若区分大小写则选择BLOB类型。

日期和时间类型

日期和时间类型包括DATE、DATETIME、TIME、TIMESTAMP和YEAR。其中的每种类型都有其取值范围,如赋予它一个不合法的值,将会被“0”替代。

类型取值范围说明
DATE1000-01-01~9999-12-30日期,格式为YYYY-MM-DD
TIME-898:58:59~835:59:59时间,格式为HH:MM:SS
DATETIME1000-01-01 00:00:00~9999-12-31 23:59:59日期和时间,格式为YYYY-MM-DD HH:MM:SS
TIMESTAMP1970-01-01 00:00:00~2037年的某个时间时间标签,在处理报告时使用,显示格式取决于M的值
YEAR1901~2155年份可指定两位数字和四位数字的格式

在MySQL中,日期的顺序是严格按照标准的ANSI SQL格式输出的。

上次编辑于:
贡献者: QI