数据类型介绍
tip
1字节由八个二进制位构成, 1 Bytes = 8 Bit
整数类型
类型 | 大小 | 范围(有符号) | 范围(无符号) | 用途 |
---|---|---|---|---|
TINYINT | 1 Bytes | -2^8/2 (-128) ~ 2^8/2-1 (127) | 0 ~ 2^8-1 (255) | 小整数值 |
SMALLINT | 2 Bytes | -2^16/2 ~ 2^16/2-1 (32767) | 0 ~ 2^16-1 (65535) | 大整数值 |
MEDIUMINT | 3 Bytes | -2^24/2 ~ 2^24/2-1 | 0 ~ 2^24-1 | 大整数值 |
INT | 4 Bytes | -2^32/2 ~ 2^32/2-1 | 0 ~ 2^32-1 | 标准整数值 |
BIGINT | 8 Bytes | -2^64/2 ~ 2^64/2-1 | 0 ~ 2^64-1 | 极大整数值 |
浮点类型
类型 | 大小 | 范围(有符号) | 用途 |
---|---|---|---|
FLOAT | 4 Bytes | 0 -3.402823466E+38 ~ -1.175494351E-38 1.175494351E-38 ~ 3.402823466E+38 | 单精度浮点数值 |
DOUBLE | 8 Bytes | 0 -1.7976931348623157E+308 ~ -2.2250738585072014E-308 2.2250738585072014E-308 ~ 1.7976931348623157E+308 | 双精度浮点数值 |
DECIMAL(M,D) | M>D,为M+2否则为D+2 | 依赖于M和D的值 | 小数值 |
1. 如何区分带符号和不带符号,MySQL中在定义列类型的时候,在整数型数据列后加上一个关键字unsigned是禁止负数,取值从0开始
2. 简单解释下占用字节数和取值范围的关系
使用 TINYINT 来简单描述下,因为TINYINT占用1字节,也就是8位
即:
二进制: 0000 0000 ~ 1111 1111
十进制: 0 ~(128+64+32+16+8+4+2+1)= 255, 2^8-1
字符串类型
类型 | 大小 | 用途 |
---|---|---|
CHAR | 0 ~ 255 Bytes | 定长字符串 |
VARCHAR | 0 ~ 65535 Bytes | 变长字符串 |
TINYBLOB | 0 ~ 255 Bytes | 不超过 255 个字符的二进制字符串 |
TINYTEXT | 0 ~ 255 Bytes | 短文本字符串 |
BLOB | 0 ~ 65535 Bytes | 二进制形式的长文本数据 |
TEXT | 0 ~ 65535 Bytes | 长文本数据 |
MEDIUMBLOB | 0 ~ 16777215 Bytes | 二进制形式的中等长度文本数据 |
MEDIUMTEXT | 0 ~ 16777215 Bytes | 中等长度文本数据 |
LONGBLOB | 0 ~ 4294967295 Bytes | 二进制形式的极大文本数据 |
LONGTEXT | 0 ~ 4294967295 Bytes | 极大文本数据 |
1. CHAR(n) 和 VARCHAR(n) 中括号中 n 代表字符的个数,并不代表字节个数,比如 CHAR(30) 就可以存储 30 个字符。
2. CHAR 和 VARCHAR 类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换。
3. BINARY 和 VARBINARY 类似于 CHAR 和 VARCHAR,不同的是它们包含二进制字符串而不要非二进制字符串。也就是说,它们包含字节字符串而不是字符字符串。这说明它们没有字符集,并且排序和比较基于列值字节的数值值。
4. BLOB 是一个二进制大对象,可以容纳可变数量的数据。有 4 种 BLOB 类型:TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB。它们区别在于可容纳存储范围不同。
5. 有 4 种 TEXT 类型:TINYTEXT、TEXT、MEDIUMTEXT 和 LONGTEXT。对应的这 4 种 BLOB 类型,可存储的最大长度不同,可根据实际情况选择。
日期和时间类型
类型 | 大小 | 范围 | 格式 | 用途 |
---|---|---|---|---|
DATE | 3 Bytes | 1000-01-01 ~ 9999-12-31 | YYYY-MM-DD | 日期值 |
TIME | 3 Bytes | -838:59:59 ~ 838:59:59 | HH:MM:SS | 时间值或持续时间 |
YEAR | 1 Bytes | 1901 ~ 2155 | YYYY | 年份值 |
DATETIME | 8 Bytes | 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值 |
TIMESTAMP | 4 Bytes | 1970-01-01 00:00:00 ~ 2038 | YYYYMMDD HHMMSS | 混合日期和时间值,时间戳 |