数据类型和运算符¶
一、数据类型¶
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