mysql数据类型

MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。

1.日期

  表示时间类型的为:DATETIME、DATE、TIMESTAMP、TIME和YEAR。

日期时间类型 占用空间(bytes) 日期格式 描述 零值表示
DATETIME 8  YYYY-MM-DD HH:MM:SS 日期和时间的组合。格式:YYYY-MM-DD HH:MM:SS
范围是从 '1000-01-01 00:00:00' 到 '9999-12-31 23:59:59'
0000-00-00 00:00:00
 TIMESTAMP 4  YYYY-MM-DD HH:MM:SS TIMESTAMP 值使用 Unix 纪元('1970-01-01 00:00:00' UTC) 至今的描述来存储。格式:YYYY-MM-DD HH:MM:SS
范围是从 '1970-01-01 00:00:01' UTC 到 '2038-01-09 03:14:07' UTC
00000000000000
 DATE 3  YYYY-MM-DD

日期。格式:YYYY-MM-DD

注释:支持的范围是从 '1000-01-01' 到 '9999-12-31'

0000-00-00
TIME 3 HH:MM:SS

格式:HH:MM:SS 
范围是从 '-838:59:59' 到 '838:59:59'

00:00:00
YEAR 1  YYYY

2 位或 4 位格式的年

4 位格式所允许的值:1901 到 2155。2 位格式所允许的值:70 到 69,表示从 1970 到 2069。

0000

备注:

  1) DATETIME 和 TIMESTAMP:DATETIME 和 TIMESTAMP 返回相同的格式,它们的工作方式很不同。

    在 INSERT 或 UPDATE 查询中,TIMESTAMP 自动把自身设置为当前的日期和时间。

    TIMESTAMP 也接受不同的格式,比如 YYYYMMDDHHMMSS、YYMMDDHHMMSS、YYYYMMDD 或 YYMMDD。

    TIMESTAMP,它把客户端插入的时间从当前时区转化为UTC(世界标准时间)进行存储。查询时,将其又转化为客户端当前时区进行返回。

    DATETIME,不做任何改变,基本上是原样输入和输出。

2.number

  MySQL支持所有标准SQL数值数据类型。 这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似数值数据类型(FLOAT、REAL和DOUBLE PRECISION)。

  作为SQL标准的扩展,MySQL也支持整数类型TINYINT、MEDIUMINT和BIGINT。下面的表显示了需要的每个整数类型的存储和范围。

类型 占用空间(bytes) 描述 备注
tinyint 1 范围:(-128,127) (0,255) 小整数值
smallint 2 (-32 768,32 767) 大整数值
mediumint 3   大整数值
intinteger 4   大整数值
bigint 8   极大整数值
float 4   单精度浮点数
double 8   双精度浮点数
decimal 对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2   小数值

3.字符串

  字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。该节描述了这些类型如何工作以及如何在查询中使用这些类型

类型 大小(bytes) 用途
char 0-255 定长字符串
vachar 0-65535 变长字符串
tinyblob 0-255 不超过 255 个字符的二进制字符串
tinytext 0-255 短文本字符串
blob 0-65 535 二进制形式的长文本数据
text 0-65 535 长文本数据
mediumblob 0-16 777 215 二进制形式的中等长度文本数据
mediumtext 0-16 777 215 中等长度文本数据
longblob 0-4 294 967 295 二进制形式的极大文本数据
longtext 0-4 294 967 295 极大文本数据

  char(n) 和 varchar(n) 中括号中 n 代表字符的个数,并不代表字节个数,比如 CHAR(30) 就可以存储 30 个字符。

  CHAR 和 VARCHAR 类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换。

  BINARY 和 VARBINARY 类似于 CHAR 和 VARCHAR,不同的是它们包含二进制字符串而不要非二进制字符串。也就是说,它们包含字节字符串而不是字符字符串。这说明它们没有字符集,并且排序和比较基于列值字节的数值值。

  BLOB 是一个二进制大对象,可以容纳可变数量的数据。有 4 种 BLOB 类型:TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB。它们区别在于可容纳存储范围不同。

  有 4 种 TEXT 类型:TINYTEXT、TEXT、MEDIUMTEXT 和 LONGTEXT。对应的这 4 种 BLOB 类型,可存储的最大长度不同,可根据实际情况选择。

备注(数据类型中长度的含义):

  1). 字符串  常用的字符串类型的数据类型有 CHAR 和 VARCHAR 两种,两者后面都需要跟上一个数字表示长度,例如

    char(n),varchar(n),  两者中的 n 含义均为该字段最大可容纳的字符数。(注意早期的版本中,n指的是字节数,你也不需要关注是哪些版本,因为是十多年前的版本了,估计一般人也用不到)。

  (1个字符可能是字母或者汉字或者标点符号)

  2). 整数类型 常用的整数数据类型有 tinyint ,smallint ,mediumint , int ,bigint 共计5种,在声明列时,后面也可以跟上 n ,例如 int(n) 。实际上这里的 n 非常鸡肋,几乎没有任何使用场景。它的含义是“显示位宽”,这个 n 无论填任何数,不影响存储环节,仅影响在检索时的输出格式,而且在非常严格的情况下才成立。

  3).浮点型 FLOAT 类型固定占用4个字节, DOUBLE 类型固定占用8个字节,逻辑和上述的整型类似;DECIMAL 类型,它的定义方式是 DECIMAL(M,D) ,其中 M 表示最大位数,D 表示小数点右侧的位数 

  例如我们定义 DECIMAL(5,2) ,则表示最大位数为5位,小数点后2位,因此小数点前还剩下3位,于是取值范围为 -999.99至999.99 。存储以字符串存储,比如定义 DECIMAL(3,0) ,存入100时,实际存入的是由字符“1”,“0”,“0”拼接而成的字符串“100”的二进制值,存入时占用3个字节,分别是31,30,30(注意这是十六进制)。

  DECIMAL 类型在存储时有补0操作。小数点前不足,向更高位补0,小数点后不足,向更低位补0

 

参考:

  https://blog.csdn.net/csdnluolei/article/details/86488461

  https://www.runoob.com/mysql/mysql-data-types.html

  https://www.w3school.com.cn/sql/sql_datatypes.asp

  https://zhuanlan.zhihu.com/p/111028232?from_voters_page=true

原文地址:https://www.cnblogs.com/little-tech/p/13633282.html