数据类型和运算符¶
一、数据类型¶
1. 整数类型¶
mysql中整数型数据类型
类型名称 | 有符号 | 无符号 |
---|---|---|
TINYINT | -128 ~ 127 | 0 ~ 255 |
SMALLINT | -32768 ~ 32767 | 0 ~ 65535 |
MEDIUMINT | -8388608 ~ 8388607 | 0 ~ 16777215 |
INT | -2147483648 ~ 2147483647 | 0 ~ 4294967295 |
BIGINT | -9223372036854775808 ~ 9223372036854775807. | 0 ~ 18446744073709551615 |
在mysql中执行
HELP 类型名称
可以查看具体范围。
2. 浮点数类型和定点数类型¶
类型名称 | 无符号 | 有符号 |
---|---|---|
FLOAT | 0和1.175494351E-38 ~ 3.402823466E+38 | -3.402823466E+38 ~ -1.175494351E-38 |
DOUBLE | 0和2.2250738585072014E-308 ~ 1.7976931348623157E+308 | -1.7976931348623157E+308 ~ -2.2250738585072014E-308 |
DECIMAL(M,D), DEC(M,D) | 同DOUBLE | 同DOUBLE |
特点:
- M:整数部位+小数部
- D:小数部位
- 如果超过范围,则插入临界值
- M和D都可以省略,如果是decimal,则M默认为10,D默认为0
- 如果是float和double,则会根据插入的数值的精度来决定精度
- 定点型的精确度较高,如果要求插入数值的精度较高如货币运算等则考虑使用定点型
3. 日期和时间¶
类型名称 | 日期格式 | 日期范围 |
---|---|---|
YEAR | YYYY | 1901 ~ 2155 |
TIME | HH:MM:SS[.fraction] | -838:59:59.000000 ~ 838:59:59.000000 |
DATE | YYYY-MM-DD | 1000-01-01 ~ 9999-12-31 |
DATETIME | YYYY-MM-DD HH:MM:SS[.fraction] | 1000-01-01 00:00:00.000000 ~ 9999-12-31 23:59:59.999999 |
TIMESTAMP | YYYYMMDDHHMMSS | 1970-01-01 00:00:01.000000 ~ 2038-01-19 03:14:07.999999 |
4. 文本字符串类型¶
类型名称 | 存储需求 |
---|---|
CHAR(M) | M字节,1<=M<=255(M表示列长度) |
VARCHAR(M) | L+1字节,L<=M,1<=M<=65535 |
TINYTEXT | L+1字节,L<2^8 |
TEXT | L+2字节,L<2^16 |
MEDIUMTEXT | L+3字节,L<2^24 |
LONGTEXT | L+4字节,L<2^32 |
ENUM | 1或2个字节,取决于枚举值的数据(最大值65535) |
SET | 1,2,3,4或8个字节,取决于集合成员的数量(最多64个成员) |
L:列值的实际长度
5. 二进制字符串¶
类型名称 | |
---|---|
BIT(M) | M位二进制数,最大值为64,默认为1 |
BINARY(M) | 字节数为M,允许长度为0-M的定长二进制字符串 |
VARBINARY(M) | 允许长度为0-M的变长二进制字符串 |
TINYBLOB | 可边长二进制数据,最多255个字节 |
BLOB | 可边长二进制数据,最多2^16-1个字节 |
MEDIUMBLOB | 可边长二进制数据,最多2^24-1个字节 |
LONGBLOB | 可边长二进制数据,最多2^32-1个字节 |
数据类型的选择:
- 如果要对小数进行数值比较,最好用DECIMAL
-
float(M,D)是非标准SQL定义,尽量不要使用
-
对于存储不大,但在速度上有要求的用CHAR,反之用VARCHAR