数值类型
| 严格数值类型 | TINYINT | 整数类型 | 字节:1,最小值:0,最大值:255 |
|---|---|---|---|
| SMALLINT | 整数类型 | 字节:2,最小值:0,最大值:很大 | |
| MEDIUMINT | 整数类型 | 字节:3,最小值:0,最大值:很大 | |
| INT | 整数类型 | 字节:4,最小值:0,最大值:很大 | |
| BIGINT | 整数类型 | 字节:8,最小值:0,最大值:很大 | |
| DEC(M,D) | 定点数类型 | 字节:M+2 | |
| NUMERIC | |||
| BIT(M) | 位类型 | 字节:1~8 | |
| 近似数值类型 | FLOAT(M,D) | 单精度浮点类型 | 字节:4 |
| DOUBLE(M,D) | 双精度浮点类型 | 字节:8 | |
| REAL | |||
| PRECISION |
1. 所有的整数类型都有一个可选属性UNSIGNED(无符号),如果需要在字段里面保存非负数或者需要较大的上限值时,可以用此选项,它的取值方位是正常值的下限取0,上限取原值的2倍。
2. 整数类型的另一个属性为AUTO_INCREMENT。在需要产生唯一标识符或顺序值时,可利用此属性。
- AUTO_INCREMENT值一般从1开始,每行增加1。
- 在插入NULL到一个AUTO_INCREMENT列时,MYSQL插入一个比该列中当前最大值大1的值。
- 一个表中最多只能有一个AUTO_INCREMENT列。
- 对于任何想要使用AUTO_INCREMENT的列,应该定义为NOT NULL,并定义为PRIMARY KEY或定义为UNIQUE键。
日期时间类型
| DATE | 日期类型 | yyyy-mm-dd | | —- | —- | —- | | TIME | 日期类型 | hh:mm:ss | | DATETIME | 日期类型 | yyyy-mm-dd hh:mm:ss | | TIMESTAMP | 日期类型 | 需要经常插入或者更新使用 |
TIMESTAMP
TIMESTAMP用来表示和时区相关的当前系统时间,格式:yyyy-mm-dd hh:mm:ss
当插入日期时,会先转换为本地时区后存放,而在数据库里面取出时,也同样需要将日期转换为本地时区后显示。
alter table t_timestamp modify t1 timestamp default current_timestamp;
字符串类型
| CHAR | 定长字符串 | 最长255 |
|---|---|---|
| VARCHAR | 可变长字符串 | 最长65535 |
| BINARY | ||
| VARBINARY | ||
| TEXT | ||
| ENUM | ||
| SET | ||
| BLOB | 二进制大对象 | 存储图片、视频等流媒体信息 |
| CLOB | 字符大对象 | 存储较大文本,比如可存储4G字符串 |
CHAR和VARCHAR
- CHAR和VARCHAR很类似,都用来保存MYSQL中较短的字符串。
- 二者的区别在于存储方式不同:CHAR列长度固定为创建表时声明的长度,长度为从0~255的任何值;而VARCHAR列中的值为可变长字符串,长度可以指定为0~65535之间的值。
- 在检索的时候,CHAR列删除了尾部的空格,而VARCHAR则保留这些空格。
BINARY和VARBINARY
- BINARY和VARBINARY类似于CHAR和VARCHAR。
- 不同的是它们包含二进制字符串而不包含非二进制字符串。
ENUM
- ENUM中文名称叫做枚举类型,它的值范围需要在创建表时通过枚举方式显示指定。
- 对1~255个成员的枚举需要1个字节存储。
- 对于255~65535个成员,需要2个字节存储。
- 最多允许有65535个成员。 ``` create table t_enum(gender enum(‘M’,’F’)); insert into t_enum values(‘M’),(‘1’),(‘f’),(NULL);
mysql> select * from t_enum; +————+ | gender | +————+ | M | | M | | F | | NULL | +————+
mysql> insert into t_enum values(‘A’); ERROR 1265 (01000): Data truncated for column ‘gender’ at row 1
- **从上面的例子中,可以看出ENUM类型是忽略大小写的,在存储“M”,“F”时,将它们转成大写。**
- **ENUM类型只允许从值集合中选取单个值,而不能一次取多个值。**
**
<a name="rgbCH"></a>
#### SET类型
- **SET和ENUM类型非常类似,也是一个字符串对象,里面可以包含0~64个成员。**
- **根据成员的不同,存储上也有所不同:**
- **1~8成员集合,占1个字节。**
- **9~16成员集合,占2个字节。**
- **17~24成员集合,占3个字节。**
- **25~32成员集合,占4个字节。**
- **33~64成员集合,占5个字节。**
- **SET和ENUM除了存储之外,最主要的区别在于SET类型一次可以选取多个成员,而ENUM则只能选一个。**
create table t_set ( col SET(‘a’,’b’,’c’,’d’) );
insert into t_set values(‘a,b’),(‘a,d,a’),(‘a,b’),(‘a,c’),(‘a’);
mysql> select * from t_set; +———+ | col | +———+ | a,b | | a,d | | a,b | | a,c | | a | +———+ ```
- SET类型可以从允许值集合中选择任意1个或多个元素进行组合,所以对于输入的值只要是在允许值的组合范围内,都可以正确地注入到SET类型的列中。
- 对于超出允许值范围的值例如:(‘a, d, f’)将不允许注入到上面例子中设置的SET类型列中。
- 而对于(‘a, d, a’)这样包含重复成员的集合将只取一次,写入结果为“a,d”。
