MySQL数据类型

文章目录

  • 1. 数值类型
    • 整型
    • 浮点型
    • 定点型
  • 2. 日期时间类型
    • datetime
    • timestamp
  • 3. 字符串类型
    • 字符串
    • 文本字符串
    • 二进制字符串
    • 二进制大对象字符串


1. 数值类型

类型 大小(byte) 描述 取值范围(有符号) 取值范围(无符号)
tinyint 1 小整数 (-128,127) (0,255)
smallint 2 小整数 (-32 768,32 767) (0,65 535)
mediumint 3 中整数 (-8 388 608,8 388 607) (0,16 777 215)
int(integer
) 4 整数 (-2 147 483 648,2 147 483 647) (0,4 294 967 295)
bigint 8 大整数 (-9 223 372 036 854 775 808,9 223 372 036 854 775 807) (0,18 446 744 073 709 551 615)
float 4 浮点数(单精度) (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) 0,(1.175 494 351 E-38,3.402 823 466 E+38)
double 8 浮点数(双精度) (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)
decimal DECIMAL(M,D)
如果M>D,为M+2
否则为D+2
十进制数 依赖于M和D的值 小数值

整型

整型(N)包括intinyintsmallintmediumintbigint

  • N值不影响该整数类型的大小,如:int永远占4个字节
  • N表示的是显示宽度,不足的用0补足,超过的无视长度而直接显示整个数字(需要设置了unsigned zerofill(无符号补零)才有效)
    MySQL数据类型_第1张图片

浮点型

浮点型*(M,D)包括floatdouble

  • D表示浮点型数据小数点之后的精度,假如超过D位则四舍五入,即1.233四舍五入为1.23,1.237四舍五入为1.24
  • M表示浮点型数据总共的位数,D=2则表示总共支持五位,即小数点前只支持三位数,所以我们并没有看到1000.23、10000.233、100000.233这三条数据的插入,因为插入都报错了
  • 当不指定M、D的时候,会按照实际的精度来处理。

定点型

定点型(M,N)包括decimal

  • float、double在db中存储的是近似值,而decimal则是以字符串形式进行保存的
  • decimal(M,D)的规则和float/double相同,但区别在于:
    • float、double在不指定M、D时默认按照实际精度来处理
    • decimal在不指定M、D时默认为decimal(10, 0)

浮点型float、double类型存在精度丢失问题,即写入数据库的数据未必是插入数据库的数据,而decimal无论写入数据中的数据是多少,都不会存在精度丢失问题。decimal类型常见于银行系统、互联网金融系统等对小数点后的数字比较敏感的系统中。

2. 日期时间类型

类型 大小(byte) 取值范围 格式 描述
year 1 1901 ~ 2155 yyyy
date 4 1000-01-01 ~ 9999-12-31 yyyy-MM-dd 日期
time 3 -838:59:59 ~ 838:59:59 HH:mm:ss 时间
datetime 8 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 yyyy-MM-dd HH:mm:ss 日期+时间
timestamp 4 1970-01-01 00:00:01 ~ 2038-01-19 03:14:07 yyyy-MM-dd HH:mm:ss 时间戳(日期+时间)(UTC时区)

datetime

  • datetime占8个字节

  • datetime存储的时间范围为1000-01-01 00:00:00 ~ 9999-12-31 23:59:59

  • datetime存储的时间及返回的时间都与时区无关

    如果更换时区(服务器更换地址或者更换客户端连接时区),数据库读出的时间不会变化(错误)

timestamp

  • timestamp占4个字节

  • timestamp存储的时间范围为1970-01-01 00:00:01 ~ 2038-01-19 03:14:07(UTC时区)

  • timestamp存储的时间及返回的时间都依赖于当前时区

    如果更换时区(服务器更换地址或者更换客户端连接时区),数据库读出的时间会随时区变化(正确)

    • timestamp存储的时间:把插入的时间从当前时区转化为UTC(世界标准时间)进行存储
    • timestamp显示的时间:把存储的时间UTC(世界标准时间)转化为当前时区的时间进行返回

3. 字符串类型

类型 大小(byte) 描述
char 0-255 定长字符串
varchar 0-65 535 变长字符串
binary 0-255 二进制定长字符串
varbinary 0-65 535 二进制变长字符串
tinytext 0-255 短文本数据
text 0-65 535 文本数据
mediumtext 0-16 777 215 中文本数据
longtext 0-4 294 967 295 大文本数据
tinyblob 0-255 短文本数据(二进制形式)
blob 0-65 535 文本数据(二进制形式)
mediumblob 0-16 777 215 中文本数据(二进制形式)
longblob 0-4 294 967 295 大文本数据(二进制形式)

字符串

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

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

文本字符串

有4种text类型:tinytext、text、mediumtext和longtext。对应的这4种blob类型,可存储的最大长度不同,可根据实际情况选择。

二进制字符串

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

二进制大对象字符串

blob(binary large object)指二进制大对象,有4种blob类型:tinyblob、blob、mediumblob和longblob。blob是一个二进制大对象,可以容纳可变数量的数据。它们区别在于可容纳存储范围不同。

你可能感兴趣的:(数据库,mysql,数据库)