MySQL 数据类型

1)整数型

类型

占用空间

最小值

最大值

举栗与知识点

INT 4

signed -2147483648 (-2^31)【默认】

unsigned 0

2147483647 (2^31-1)

4294967295 (2^32-1)

int的默认类型是有符号的

BIGINT 8

signed -2^63 【默认】

unsigned 0

2^63

2^64-1

int(3) int(11)中3和11的含义:

这里的3跟11表示显示宽度,本身没有意义,只有与zerofill配合在一起,才会起作用。

create table 时指定数据类型为int(0),但使用desc table_name时发现int(0)变成了int(11),原因是signed int 的默认显示宽度是11。。为什么11是默认值,是因为signed int类型的取值范围-2147483648~ 2147483647,最大值加上符号位是11位,当我设定int为unsigned,它的取值范围是0~ 4294967295,对应的默认显示宽度是10,如图所示。


INT类型的属性:

  UNSIGNED/SIGNED: 是否有符号

  ZEROFILL:  定义显示宽度,不会更改值,当插入数据宽度大于定义的宽度,不会对插入的数据有任何影响,还会按照类型的实际进度进行保存,这时宽度格式已经没有任何意义。

Auto_INCREMENT:自增,每张表一个自增字段,该自增字段,必须有唯一索引,以避免序号重复

2).浮点型

类型

占用空间

有效位数

知识点

单精度类型: FLOAT

4 8

1、float(M,D)/DOUBLE(M,D)/DECIMAL(M,D),M表示总位数,D表示小数点后面有几位,M和D又称为精度和标度。

2、mysql在保存值的时候,会进行四舍五入,例如float(7,4),当插入,999.00009 这个时候会显示999.0001

3.FLOAT和DOUBLE在不指定精度时,默认会按照实际的精度来显示,而DECIMAL在不指定精度时,默认整数为10,小数为0。

双精度类型: DOUBLE

8 16

高精度类型:DECIMAL 变长  

1.DECIMAL用于在数据库中存储精确的数值,FLOAT与DOUBLE在数据库中存放的是近似值

2.DECIMAL(M,D)中M的范围是1〜65,D的范围是0~30

在mysql中float、double(或real)是浮点数,decimal(或numberic)是定点数,浮点数相对于定点数的优点是在长度一定的情况下,浮点数能够表示更大的数据范围;它的缺点是会引起精度问题。

在今后关于浮点数和定点数的应用中,需要记住以下几点:

参考:https://blog.csdn.net/qq_32823673/article/details/80410238

1、浮点数存在误差问题;

2、对货币等对精度敏感的数据,应该用定点数表示或存储;

3、编程中,如果用到浮点数,要特别注意误差问题,并尽量避免做浮点数比较;

4、要注意浮点数中一些特殊值的处理。

3)字符类型

类型

说明

最大长度

用途
char(n) 定长字符 255字节 定长字符串
varchar(n) 变长字符 65535字节 变长字符串
tinytext 大对象 255字节 短文本字符串
text 大对象 65535字节 长文本数据

知识点:

1.char(n)和varchar(n)中括号中n代表字符的个数,并不代表字节个数,所以当使用了中文的时候(UTF8)意味着可以插入m个中文,但是实际会占用m*3个字节

2.char和varchar最大的区别就在于char不管实际value都会占用n个字符的空间,而varchar只会占用实际字符应该占用的空间+1,并且实际空间+1<=n。

3.超过char和varchar的n设置后,可能会出现报错或者是字符串的截断,跟MySQL的版本有关。

4、char的上限为255字节,varchar的上限65535字节,text的上限为65535。

5、char在存储的时候会截断尾部的空格,varchar和text不会。

6、varchar会使用1-3个字节来存储长度,text不会。

7.当varchar大于某些数值的时候,其会自动转换为text,大概规则如下:

  • 大于varchar(255)变为 tinytext
  • 大于varchar(500)变为 text

所以对于过大的内容使用varchar和text没有太多区别。

总结:

  • char,存定长,速度快,存在空间浪费的可能,会处理尾部空格,上限255。
  • varchar,存变长,速度慢,不存在空间浪费,不处理尾部空格,上限65535,但是有存储长度实际65532最大可用。
  • text,存变长大数据,速度慢,不存在空间浪费,不处理尾部空格,上限65535,会用额外空间存放数据长度,顾可以全部使用65535。

举例:

 

 

 

 

字符串类型-----ENUM & SET

      ENUM类型最多运行65536个值,SET类型最多允许64个值,set类型一次可以选取多个成员,而ENUM则只能选一个,就相当于ENUM是单选,而set是复选

  • mysql> create table b ( user varchar(30),sex ENUM('male','female'));
  • Query OK, 0 rows affected (0.07 sec)
  • mysql> insert into b values( 'david','male');
  • Query OK, 1 row affected (0.01 sec)
  • Records: 1 Duplicates: 0 Warnings: 0
  • mysql> insert into b values( 'john','bmale');
  • ERROR 1265 (01000): Data truncated for column 'sex' at row 1

4)日期类型

类型
大小
(字节)
范围
格式
用途
DATE 3 1000-01-01~9999-12-31 YYYY-MM-DD 日期值
TIME 3 '-838:59:59'~'838:59:59' HH:MM:SS 时间值或持续时间
YEAR 1 1901~2155 YYYY 年份值
DATETIME 8 1000-01-01 00:00:00~9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS 混合日期和时间值
TIMESTAMP 4

1970-01-01 00:00:00 UTC~2038-01-19 03:14:07 UTC

YYYY-MM-DD HH:MM:SS 混合日期和时间值,时间戳

 

日期函数

  • NOW() 返回sql执行的时间
  • current_timestamp 与now()函数同义

常用的创建包含create_time与update_time表的命令:

 
 

create table test_time (id int(10) NOT NULL AUTO_INCREMENT ,

name varchar(10),

create_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,

update_time datetime NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,

PRIMARY KEY (`id`));

CURRENT_TIMESTAMP  字段设置后 当insert数据时 mysql会自动设置当前系统时间 赋值给该属性字段

ON UPDATE CURRENT_TIMESTAMP 字段设置后 当update数据时 并且 成功发生更改时 mysql会自动设置当前系统时间 赋值给该属性字段

 

 

posted @ 2019-11-07 17:09  声声慢43  阅读(359)  评论(0编辑  收藏  举报