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)包括int、inyint、smallint、mediumint、bigint:
- N值不影响该整数类型的大小,如:int永远占4个字节
- N表示的是显示宽度,不足的用0补足,超过的无视长度而直接显示整个数字(需要设置了unsigned zerofill(无符号补零)才有效)
浮点型
浮点型*(M,D)包括float、double
- 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 UTC ~ 2038-01-19 03:14:07 UTC | 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是一个二进制大对象,可以容纳可变数量的数据。它们区别在于可容纳存储范围不同。