MySQL的数据类型包括5大类:数字类型、字符串类型、二进制类型、日期类型、Enum类型
下表包含几乎所有的数据类型对应的表现形式、范围
类型名 | MySQL类型 | python类型 | 描述 | 子节占据 | 表示形式 | 范围 | 场景 |
---|---|---|---|---|---|---|---|
数字 | - | - | - | - | - | - | - |
tinyint | tinyint | / | / | 1字节 | / | -128到127 | 不可以存IP地址 |
SmallInteger | smallint | int | 取值范围较小,一般为16位 | 2字节 | / | -32768到32767 | / |
MEDIUMINT | MEDIUMINT | int | 取值范围较小,一般为16位 | 3字节 | / | -8388608到8388607 | / |
Integer | int | int | 普通整数,一般32位 | 4字节 | / | -2147483648到2147483647 | / |
BigInteger | bigint | int/long | 不限精度的整数 | 8字节 | / | -9223372036854775808到9223372036854775807 | / |
Float | float | float | 单精度浮点型 | 4字节 | / | 精度为6位小数 | 不可以算钱 |
Float | float(x) | float | 单精度浮点型(X < = 24) | 4字节 | / | 精度为6位小数 | 不可以算钱 |
Float | float(x) | float | 单精度浮点型(25 < = X < = 53 ) | 8字节 | / | 精度为6位小数 | 不可以算钱 |
double | double | / | 双精度浮点型 | 8字节 | / | 精度为15位小数 | 不可以算钱 |
Numeric | decimal | decimal.Decimal | 定点数 | 4-8字节 | / | 精度在10进制下最多为65位 | 财务计算 |
字符串 | - | - | - | - | - | - | - |
String | char(M) | str | 固定字符串 | 与字符集相关(单行不能超过65535个字节) | / | 1 <= M <= 255 | / |
String | varchar(M) | str | 变长字符串 | 与字符集相关(单行不能超过65535个字节) | / | 1 <= M <= 255 | / |
Text | tinytext | str | 变长字符串 | 65535bytes | / | L< 2 ^ 16(64K) | / |
Text(65536) | mediumtext | str | 变长字符串 | / | / | L< 2 ^ 24(16M) | / |
Text(16777216) | longtext | str | 变长字符串 | / | / | L< 2 ^ 32(4G) | / |
Unicode | varchar | unicode | 变长字符串 | / | / | / | / |
UnicodeText | text | unicode | 变长字符串,64K | / | / | / | / |
二进制 | - | - | - | - | - | - | - |
LargeBinary | blob | str | 二进制文件,64K | / | / | / | / |
LargeBinary(65536) | mediumblob | str | 二进制,max16M | / | / | / | / |
LargeBinary(16777216) | longblob | str | 二进制,max32M | / | / | / | / |
PickleType | blob | 任何python对象 | 自动使用Pickle序列化,只有blob | / | / | / | / |
Boolean | tinyint | bool | 布尔值 | 2字节 | / | / | / |
TINYBLOB | TINYBLOB | BLOB | 布尔 | L+1 字节 | / | L< 2 ^ 8(255B) | / |
日期 | - | - | - | - | - | - | - |
YEAR | year | / | 年 | 1字节 | yyyy |
/ | / |
Date | date | datetime.date | 日期 | 3字节 | yyyy-mm-dd |
/ | / |
Time | time | date.time | 时间 | 3字节 | hh:mm:ss |
/ | / |
DateTime | datetime | datetime.datetime | 日期和时间 | 8字节 | yyyy-mm-dd hh:mm:ss |
'1000-01-01 00:00:00.000000' to '9999-12-31 23:59:59.999999' |
服务器时区不一样 |
Interval | datetime | datetime.timedelta | 时间间隔 | / | / | / | / |
/ | timestamp | / | 时间挫 | 4字节 | yyyy-mm-dd hh:mm:ss |
'1970-01-01 00:00:01.000000' to '2038-01-19 03:14:07.999999' |
自动插入时间或者自动更新时间 |
- | - | - | - | - | - | - | - |
Enum | enum | str | 一组字符串 | 1 或 2 个字节, 取决于枚举值的数目(最大值65535) | / | / | / |
大家可以根据需要保存的数据选择对应的数据类型,选择数据类型后,MySQL会有相对应的基础功能。
例如:记录创建时间、更新时间,不需要通过程序生成时间
如果存进去的是NULL
timestamp会自动储存当前时间
datetime会储存 NULL
下面都是 MySQL 允许的形式,MySQL 会自动处理
例如:2016-10-01 20:48:59
例如:2016#10#01 20/48/59
例如:20161001204859
CHAR
作用:用于存储固定长度的字符串,括号内需填写字符的最大长度
范围:1到255
例如:CHAR(10)
表示存储最大长度为10的字符串。
VARCHAR
作用:用于存储可变长度的字符串,括号内需填写字符的最大长度
范围:1到65535
规则:1(数字)表示1个字符串(字)
规则:啊(中文字)表示1个字符串(字)
规则:大于varchar(255)自动转化为 tinytext
规则:大于varchar(500)自动转化为 text
规则:大于varchar(20000)自动转化为 mediumtext
例如:VARCHAR(255)
表示存储最大长度为255的字符串
例如:VARCHAR(50)
表示存储最大长度为50的字符串
DECIMAL、NUMERIC
作用:用于存储精确的数值,括号内需填写总位数和小数点后的位数
格式:(M, D)
例如:DECIMAL(5, 2)
表示存储最大为5位数(包括小数点后的2位)的数值
FLOAT、DOUBLE
作用:用于存储浮点数,括号内需填写总位数和小数点后的位数
格式:(M, D)
例如:FLOAT(7, 4)
表示存储最大为7位数(包括小数点后的4位)的浮点数值
ENUM、SET
作用:用于表示枚举类型和集合类型,括号内需填写预定义的值
例如:ENUM('A', 'B', 'C')
表示该字段只能存储’A’, ‘B’, ‘C’这三个值之一
8、int
()指的是显示长度
CREATE TABLE int_demo (
id INT(11) NOT NULL AUTO_INCREMENT,
a INT(11) NOT NULL,
b INT(11) UNSIGNED ZEROFILL NOT NULL,
c INT(5) DEFAULT NULL,
d INT(5) UNSIGNED ZEROFILL NOT NULL,
e INT(15) DEFAULT NULL,
PRIMARY KEY (`id`)
)
INSERT INTO int_demo (a, b, c, d, e) VALUES (1, 1, 1, 1, 1);
INSERT INTO int_demo (a, b, c, d, e) VALUES (1234567890, 1234567890, 1234567890, 1234567890, 1234567890);
id | a | b | c | d | e |
---|---|---|---|---|---|
1 | 1 | 00000000001 | 1 | 00001 | 1 |
2 | 1234567890 | 01234567890 | 1234567890 | 1234567890 | 1234567890 |