数值类型

严格数值类型 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
当插入日期时,会先转换为本地时区后存放,而在数据库里面取出时,也同样需要将日期转换为本地时区后显示。

  1. 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”。