MySQL 数据类型总结
一、数值类型
1、整型
MySQL 数据类型 | 大小 | 范围(有符号) | 范围(无符号) | 用途 |
---|---|---|---|---|
TINYINT | 1 个字节 | (-128,127) | (0,255) | 小整数值 |
SMALLINT | 2 个字节 | (-32768,32767) | (0,65535) | 大整数值 |
MEDIUMINT | 3 个字节 | (-8388608,8388607) | (0,16777215) | 大整数值 |
INT / INTEGER | 4 个字节 | (-2147483648,2147483647) | (0,4294967295) | 大整数值 |
BIGINT | 8 个字节 | (+-9.22 × 1018) | (0,18446744073709551615) | 极大整数值 |
对于整数类型,一般指定 INT 即可。
2、浮点型
类型 | 大小 | 范围(有符号) | 范围(无符号) | 用途 |
---|---|---|---|---|
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) | 单精度 精度 7 位 |
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) | 双精度 精度 15 位 |
DECIMAL | DECIMAL(M,D) 中 如果 M>D,为 M+2,否则为 D+2 | 依赖于 M 和 D 的值 | 依赖于 M 和 D 的值 | 小数值 精度 28 位 |
对精度要求小于 7 位的,直接用 FLOAT,大于 7 位的用 DOUBLE,大于 15 位的用定点数 DECIMAL 存储,例如科学、金融、货币等对精度要求高的数据。
二、字符串类型
字符串分为二进制与非二进制类型:
- 二进制用于储存图片、声音等文件;
- 非二进制用于储存文本数据,受字符集和校对规则影响。
类型 | 大小 | 用途 |
---|---|---|
CHAR | 0-255 字节 | 定长字符串 |
VARCHAR | 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 和 VARCHAR 的区别
char 类型是定长类型,比如定义了 20 长度的 char 类型,只存一个字符也占用 20 个长度,char 处理速度快,但空间占用大,一般用于手机号、邮箱、密码等长度相对固定的场景。
varchar 类型与 char 相反,点用空间受内容影响,可以把文章标题、简介等设为 varchar 类型。
1、字符集
字符集(Character set)是多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同。常用的字符集有 GBK、BIG5、UTF8。其中,UTF8 字符包含文字内容更广,如韩文、日文、德文兼容度更高,也是推荐使用的字符集。可通过以下命令查看服务器支持的字符集:
SHOW CHARACTER SET;
查询结果如下:
表如果不设置字符集则会继承数据库的字符集,字段同理,如果不设置则继承表的字符集。
2、校对规则
校对规则是在字符集内用于字符比较和排序的一套规则,以 _ci
结束的为大小写不敏感、_bin
结束的为不区分大小写。可通过以下命令查看系统支持的校对规则:
SHOW COLLATION;
三、日期和时间类型
类型 | 大小 | 范围 | 格式 | 用途 |
---|---|---|---|---|
DATE | 3 字节 | 1000-01-01 / 9999-12-31 | YYYY-MM-DD | 日期值 |
TIME | 3 字节 | '-838:59:59' / '838:59:59' | HH:MM:SS | 时间值或持续时间 |
YEAR | 1 字节 | 1901 / 2155 | YYYY | 年份值 |
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 | 混合日期和时间值,时间戳 |