一、数值类型
以下数据类型为 MySQL 5.0 后的版本所具有。
1.整数类型
整数类型 | 字节 |
---|---|
TINYINT | 1 |
SMALLINT | 2 |
MEDIUMINT | 3 |
INT、INTEGER | 4 |
BIGINT | 8 |
MySQL 支持在类型名称后指定显示宽度,如 INT(3) 表示当宽度小于3位时在数字前填满。属性 ZEROFILL 表示用 0 填满。
当插入宽度大于指定宽度,对插入数据没有任何影响。
属性 UNSIGNED 表示无符号
属性 AUTO_INCREMENT 表示自增,只能用于整数类型。并且使用该属性的列,必须定义为 NOT NULL,并且是 PRIMARY KEY 或者 UNIQUE。
CREATE TABLE tb_name (ID INT AUTO_INCREMENT NOT NULL PRIMARY KEY);
CREATE TABLE tb_name (ID INT AUTO_INCREMENT NOT NULL, PRIMARY KEY(ID));
CREATE TABLE tb_name (ID INT AUTO_INCREMENT NOT NULL UNIQUE);
CREATE TABLE tb_name (ID INT AUTO_INCREMENT NOT NULL, UNIQUE(ID));
2.浮点数类型
浮点数类型 | 字节 |
---|---|
FLOAT | 4 |
DOUBLE | 8 |
浮点数后指定 (M,D) 不是标准用法。
浮点数类型后可以指定 (M,D)。M 是精度,整数位+小数位。 D 是标度,小数位。
如果指定精度和标度,会自动四舍五入后的结果插入。
如果不指定精度时,会按照实际的精度显示,由实际的硬件和操作系统决定。
3.定点数类型
定点数类型 | 字节 |
---|---|
DEC(M,D)、DECIMAL(M,D) | M+2 |
如果指定精度和标度,超出了精度和标度值系统会报错。
如果没有指定精度和标度,会按照默认 DECIMAL(10,0) 来操作。
4.位类型
位类型 | 字节 |
---|---|
BIT(M) | 1~8 |
位类型直接用 SELECT 命令无法直接显示,可以使用 bin() 或者 hex() 函数进行读取。
超出位类型的位数,将报错无法插入。
二、日期时间类型
日期和时间类型 | 字节 |
---|---|
DATE | 4 |
DATETIME | 8 |
TIMESTAMP | 4 |
TIME | 3 |
YEAR | 1 |
三、字符串类型
字符串类型 | 字节 |
---|---|
CHAR(M) | M |
VARCHAR(M) | M+1 |
TINYBLOB | 长度+1 |
BLOB | 长度+2 |
MEDIUMBLOL | 长度+3 |
LONGBLOB | 长度+4 |
TINYTEXT | 长度+1 |
TEXT | 长度+2 |
MEDIUMTEXT | 长度+3 |
LONGTEXT | 长度+4 |
VARBINARY(M) | 长度+1 |
BINARY(M) | M |
1.CHAR 和 VARCHAR
CHAR 和 VARCHAR 都用于存储比较短的字符串。
不同点:
CHAR 长度固定, VARCHAR 为可变长度字符串。
CHAR 删除插入字符串尾部的空格, VARCHAR 保留这些空格。
2.BINARY 和 VARBINARY
BINARY 和 VARBINARY 用于存储二进制字符串。
- 当插入字符串没有达到定义长度 M 时,会在值的最后填充“0x00”以达到指定字段的长度。
3.ENUM
ENUM 成为美剧类型。
- 1~255个成员,占1个字节
- 256~65535个成员,占2个字节
创建 gender 字段为枚举类型,成员为 M 和 F:
CREATE TABLE tb_name (gender ENUM('M','F'));
枚举类型是忽略大小写的
如果插入的值不在枚举范围内,不会报错,自动插入枚举的第一个值。
4.SET
SET 可以包含 0~64 个成员,成员个数不同,存储空间不同。
- 1~8个成员,占1个字节
- 9~16个成员,占2个字节
- 17~24个成员,占3个字节
- 25~32个成员,占4个字节
- 33~64个成员,占8个字节
创建 col 字段为集合类型,成员为 a b c d
CREATE TABLE tb_name (col SET('a','b','c','d'));
插入元素
INSERT INTO tb_name VALUES('a,b'),('a,c');