MySQL 的数据类型,有哪些?
- MySQL数据类型选择指南:https://www.awaimai.com/1146.html
实数:
数据类型 | 多少个字节 | 范围(有符号) | 范围(无符号) | 默认值可设置为 | 是否必须指定 length |
---|---|---|---|---|---|
TINYINT | 1 | (-128,127) | (0,255) | '0' | 可指定 length |
SMALLINT | 2 | (-32 768,32 767) | (0,65 535) | '0' | 可指定 length |
MEDIUMINT | 3 | (-8 388 608,8 388 607) | 0 ~ 16 777 215(1677 万) | '0' | 可指定 length |
INT 或 INTEGER | 4 | (-2 147 483 648,2 147 483 647) | 0 ~ 4 294 967 295(42 亿) | '0' | 可指定 length |
BIGINT | 8 | (-9,223,372,036,854,775,808,9 223 372 036 854 775 807) | 0 ~ 18 446 744 073 709 551 615(1844 亿亿,18446兆(一万亿等于一兆,亿亿就是:十兆;)) | '0' | 可指定 length |
复数:
数据类型 | 多少个字节 | 范围(有符号) | 范围(无符号) | 默认值可设置为 | 是否必须指定 length,decimals |
---|---|---|---|---|---|
FLOAT | 4(MySQL 数据类型(float)的注意事项) | (-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小数个数) ,每4个字节存9个数字,小数点占1个字节; 例如,DECIMAL(18,9)小数点两边各存储9个数字,所以小数点两边各占用4个字节,再加上小数点本身占用1个字节,总共占用9个字节。 |
依赖于M和D的值 | 依赖于M和D的值 | 可指定 | |
REAL | 可指定 | ||||
NUMERIC | 可指定 |
字符串类型(char(n)、varchar(n) 中的 n,4.0版本以下指:字节数,5.0 版本以上指:当前字符集的字符数)
varchar的最大长度为65535个字节,不同的编码所对应的最大可存储的字符数不同;
计算:表中varchar类型的字段能容纳的最大字符数?:https://www.cnblogs.com/cag2050/p/10401538.html
数据类型 | 大小 | 默认值可设置为 | 是否必须指定 length |
---|---|---|---|
CHAR | 0-255 字节 | '' | 可指定 length |
VARCHAR | 0-65535 字节 | '' | 必须指定 length(因为默认大小是1个字节或字符) |
二进制字符串类型(BINARY 和 VARBINARY 存储的是二进制字符串,与字符集无关;BINARY(n)、VARBINARY(n) 中的n,指的是:字节长度)
数据类型 | 大小 | 默认值可设置为 | 是否必须指定 length |
---|---|---|---|
BINARY | 0-255 字节 | 可指定 length | |
VARBINARY | 0-65535 字节 | 必须指定 length |
TEXT 类型(长文本数据)
数据类型 | 大小 | 默认值可设置为(BLOB 和 TEXT 都不能有默认值) | 是否必须指定 length |
---|---|---|---|
TINYTEXT | 0-255 字节 | 不能有默认值 | 不能指定 length |
TEXT | 0-65535 字节 | 不能有默认值 | 可指定 length |
MEDIUMTEXT | 0-16 777 215字节(1677 万字节) | 不能有默认值 | 不能指定 length |
LONGTEXT | 0-4 294 967 295字节(42 亿字节) | 不能有默认值 | 不能指定 length |
BLOB 类型(二进制形式的长文本数据)
数据类型 | 大小 | 默认值可设置为(BLOB 和 TEXT 都不能有默认值) | 是否必须指定 length |
---|---|---|---|
TINYBLOB | 0-255 字节 | 不能有默认值 | 不能指定 length |
BLOB | 0-65535 字节 | 不能有默认值 | 可指定 length |
MEDIUMBLOB | 0-16 777 215字节(1677 万字节) | 不能有默认值 | 不能指定 length |
LONGBLOB | 0-4 294 967 295字节(42 亿字节) | 不能有默认值 | 不能指定 length |
日期和时间类型
类型 | 大小(字节) | 范围 | 格式 | 默认值可设置为 | 是否必须指定 fsp |
---|---|---|---|---|---|
DATE | 3 | 1000-01-01 ~ 9999-12-31 | YYYY-MM-DD | 不能指定 | |
TIME | 3 | -838:59:59 ~ 838:59:59(此范围原因: https://www.oschina.net/question/195038_183439 , https://dev.mysql.com/doc/refman/8.0/en/time.html , https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_sec-to-time) |
HH:MM:SS | 可指定 | |
YEAR | 1 | 1901 ~ 2155 | YYYY | 不能指定 | |
DATETIME | 8 | 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 (DATETIME 存储的是整数,与时区无关) (以'YYYY-MM-DD HH:MM:SS'还是YYYYMMDDHHMMSS格式返回当前的日期和时间,取决于函数是在一个字符串还是在数字的上下文被使用) |
YYYY-MM-DD HH:MM:SS | 可指定 | |
TIMESTAMP | 4 | 1970-01-01 00:00:00 ~ 2038-01-19 结束时间是第 2147483647 秒(此数计算方法:2的31次方减1), 北京时间:2038-1-19 11:14:07, 格林尼治时间:2038年1月19日 凌晨 03:14:07 (TIMESTAMP 存储是UTC时间戳,与时区相关;具体的时分秒,不同的时区有不同的值) (以'YYYY-MM-DD HH:MM:SS'还是YYYYMMDDHHMMSS格式返回当前的日期和时间,取决于函数是在一个字符串还是在数字的上下文被使用) (推荐用 TIMESTAMP:TIMESTAMP 使用 DATETIME 一半的空间;能保存时区;拥有特殊的自动更新能力) |
YYYYMMDD HHMMSS | DEFAULT '0000-00-00 00:00:00' 或 DEFAULT CURRENT_TIMESTAMP 或 DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP (说明: CURRENT_TIMESTAMP 等价于:CURRENT_TIMESTAMP(), NOW(), LOCALTIME, LOCALTIME(), LOCALTIMESTAMP, LOCALTIMESTAMP() ) |
可指定 |
BIT 类型
数据类型 | 大小 | 默认值可设置为 | 是否必须指定 length |
---|---|---|---|
BIT | 可指定 length |
ENUM、SET
数据类型 | 大小 | 设置值 |
---|---|---|
ENUM | ENUM(value1,value2,value3,...) |
|
SET | SET(value1,value2,value3,...) |
JSON 类型(从 MySQL 5.7.8 开始支持)
数据类型 | 大小 | 默认值可设置为 | 是否必须指定 length |
---|---|---|---|
JSON | 不能指定 length |