最近在学习 node,先学习一下相关的基础,捡起以前的数据库知识,这里记录一下 mysql 的数据类型。
¶一、常见数值类型
数据类型 | 占用大小 | 范围(有符号) | 范围(无符号) | 用途 |
---|---|---|---|---|
TINYINT | 1 字节 | (-128, 127) | (0, 255) | 小整数值 |
INT 或 INTEGER | 4 字节 | (-2 147 483 648, 2 147 483 647) | (0, 4 294 967 295) | 大整数值 |
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) | 双精度浮点数值 |
- 有符号:默认为有符号,从负数到正数的取值范围
- 无符号(UNSIGNED):没有负数,最低从 0 开始
对于平常开发来说,整数类型其实到 INT 的数值范围已经很大了。
建表时经常看到类似 INT(5) 后面有个 5,它表示显示宽度 (M),M 的值不能大于取值范围长度。
举个例子: 如果 age 字段类型是 INT(5) UNSIGNED ZEROFILL,插入一条数据 age 为 99,最后显示为:00099
UNSIGNED 为无符号, ZEROFILL 的作用是用 0 填充没有数字的位置
¶二、常见字符串类型
数据类型 | 占用大小 | 用途 |
---|---|---|
CHAR | 0-255 字节 | 定长字符串 |
VARCHAR | 0-65535 字节 | 变长字符串 |
TINYTEXT | 0-255 字节 | 短文本字符串 |
TEXT | 0-65535 字节 | 长文本字符串 |
MEDIUMTEXT | 0-16 777 215 字节 | 中等长度文本数据 |
LONGTEXT | 0-4 294 967 295 字节 | 极大文本数据 |
通常情况下,用的比较多的就是 CHAR、VARCHAR、TEXT 了。在 mysql 的 UTF8 编码下:
- 1 个英文字母(包括大小写)占 1 个字节
- 1 个汉字占 3 个字节
¶三、常见日期/时间类型
数据类型 | 占用大小 | 范围 | 格式 | 用途 |
---|---|---|---|---|
DATE | 3 字节 | 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:00/2038 (结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07) | YYYYMMDD HHMMSS | 混合日期和时间值,时间戳 |
在开发中,常用的是 DATETIME 和 TIMESTAMP。