跳转至

数据类型和运算符

一、数据类型

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

特点:

  1. M:整数部位+小数部
  2. D:小数部位
  3. 如果超过范围,则插入临界值
  4. M和D都可以省略,如果是decimal,则M默认为10,D默认为0
  5. 如果是float和double,则会根据插入的数值的精度来决定精度
  6. 定点型的精确度较高,如果要求插入数值的精度较高如货币运算等则考虑使用定点型

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个字节

数据类型的选择:

  1. 如果要对小数进行数值比较,最好用DECIMAL
  2. float(M,D)是非标准SQL定义,尽量不要使用

  3. 对于存储不大,但在速度上有要求的用CHAR,反之用VARCHAR

二、运算符